Je souhaite effacer un élément d'un vecteur en utilisant la méthode d'effacement. Mais le problème ici est que l'élément n'est pas garanti de se produire une seule fois dans le vecteur. Il peut être présent plusieurs fois et je dois tous les effacer. Mon code est quelque chose comme ceci:
void erase(std::vector<int>& myNumbers_in, int number_in)
{
std::vector<int>::iterator iter = myNumbers_in.begin();
std::vector<int>::iterator endIter = myNumbers_in.end();
for(; iter != endIter; ++iter)
{
if(*iter == number_in)
{
myNumbers_in.erase(iter);
}
}
}
int main(int argc, char* argv[])
{
std::vector<int> myNmbers;
for(int i = 0; i < 2; ++i)
{
myNmbers.push_back(i);
myNmbers.push_back(i);
}
erase(myNmbers, 1);
return 0;
}
Ce code plante évidemment parce que je change la fin du vecteur en l'itérant. Quelle est la meilleure façon d'y parvenir? Existe-t-il un moyen de le faire sans itérer plusieurs fois dans le vecteur ou sans créer une copie supplémentaire du vecteur?
std::remove()
décale les éléments de sorte que les éléments à supprimer soient écrasés. L'algorithme ne change pas la taille du conteneur, et si desn
éléments sont supprimés, alors il est indéfini quels sont les derniersn
éléments.