Je suis nouveau en C++. J'aimerais savoir comment les codeurs expérimentés font cela.comment supprimer tous les entiers pairs de l'ensemble <int> en C++
ce que j'ai:
set<int> s;
s.insert(1);
s.insert(2);
s.insert(3);
s.insert(4);
s.insert(5);
for(set<int>::iterator itr = s.begin(); itr != s.end(); ++itr){
if (!(*itr % 2))
s.erase(itr);
}
et bien sûr, cela ne fonctionne pas. parce que itr est incrémenté après qu'il est effacé. cela signifie-t-il que Itr doit pointer sur le début de l'ensemble chaque fois que j'efface l'élément de l'ensemble? L'effacement d'un élément de std :: set invalide seulement les itérateurs pointant vers cet élément.
Vous avez un crochet supplémentaire dans le code. – qba
Pourquoi itr ++ est-il autorisé dans la fonction d'effacement, mais pas à l'extérieur? – Quincy
'itr ++' est autorisé à l'extérieur, mais '++ it' est en général préférable lorsque la valeur est inutilisée, pour des raisons bien trop fastidieuses d'entrer dans chaque fois que quelqu'un le fait ;-) Dans ce cas, il vaut peut-être mieux ignorez la bonne pratique habituelle et écrivez 'itr ++', juste parce que le code lit légèrement plus lisse si c'est la même chose dans les deux cas. –