286 votes

C ++ Effacer un élément vectoriel par valeur plutôt que par position?

vector<int> myVector;

et permet de dire que les valeurs du vecteur sont (dans cet ordre):

5 9 2 8 0 7

Si je voulais effacer l'élément qui contient la valeur "8", je pense que je ferais ceci:

myVector.erase(myVector.begin()+4);

Parce que ce serait effacer le 4ème élément. Mais est-il possible d'effacer un élément basé sur la valeur "8"? Comme:

myVector.eraseElementWhosValueIs(8);

Ou dois-je tout simplement besoin de parcourir tous les éléments du vecteur et de tester leurs valeurs?

485voto

Georg Fritzsche Points 59185

Qu'en est-il de std::remove() place:

 vec.erase(std::remove(vec.begin(), vec.end(), 8), vec.end());
 

117voto

zneak Points 45458

Vous pouvez utiliser std::find pour obtenir un itérateur à une valeur:

 #include <algorithm>
std::vector<int>::iterator position = std::find(vector.begin(), vector.end(), 8);
if (position != vector.end()) // == vector.end() means the element was not found
    myVector.erase(position);
 

13voto

Naveen Points 37095

Vous ne pouvez pas le faire directement. Vous devez utiliser l'algorithme std::remove pour déplacer l'élément à effacer à la fin du vecteur, puis utiliser la fonction erase . Quelque chose comme: myVector.erase(std::remove(myVector.begin(), myVector.end(), 8), myVec.end()); . Voir cette effacer des éléments de vecteur pour plus de détails.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X