Je comprends que l'effacement déplace l'itérateur automatiquement, donc quand j'enlève plusieurs occurrences je dois éviter cela pour pouvoir comparer des éléments contigus. Voilà pourquoi je fais habituellement:C++ 11: Effacer plusieurs occurrences du vecteur. Quelle est la meilleure pratique?
auto i = vect.begin();
while (i!=vect.end())
if (*i==someValue)
vect.erase(i);
else
++i;
Mais je me demandais si je pouvais aussi le faire avec une boucle, comme ceci:
for (auto i=vec.begin(); i!=vec.end(); ++i)
if (*i==someValue){
vec.erase(i);
--i;
}
La partie -I semble un peu bizarre mais ça fonctionne . Serait-ce une mauvaise pratique? Mauvais code? Être sujet aux erreurs? Ou est-ce juste d'utiliser l'une ou l'autre option?
Merci.
Assurez-vous qu'ils ne sont pas fiables. Faites ceci: https://stackoverflow.com/questions/3938838/erasing-from-a-stdvector-while-doing-a-for-each – Ryan
Pourquoi sont-ils peu fiables? Je préfère m'en tenir à mon option si c'est correct. Cependant, je ne sais pas pourquoi cela ne serait pas correct (autre que la nécessité d'assigner 'i = vect.erase (i)' pour empêcher l'invalidation de l'itérateur.) –