Je viens de Java en C++, et j'ai une situation de conception commune dans laquelle j'ai un élément (un non-primitif) que je voudrais retirer d'un fichier std :: vector. En Java, j'écrirais quelque chose comme arrayList.remove (arrayList.indexOf (myClassInstance));IndexOf de style ArrayList pour std :: vector en C++?
en C++, avec un std :: vector, quel est le meilleur moyen/le plus performant/le plus propre de faire cela? La meilleure chose à laquelle je puisse penser est de créer une référence à l'instance que je recherche, puis de parcourir le vecteur jusqu'à trouver cette référence. essentiellement, comparer l'adresse mémoire de chaque élément du vecteur avec la référence jusqu'à ce que j'obtienne une correspondance.
suis-je sur la bonne voie? ou y a-t-il une meilleure façon de le faire? (Peut-être en utilisant un autre conteneur std, je ne l'ai utilisé std :: vecteur à ce jour.)
En supposant que vous avez une collection de pointeurs ou shared_ptr, std :: set peut bien fonctionner pour vous , juste en comparant les adresses des pointeurs. Si vous connaissez l'adresse de l'article que vous cherchez juste mySet.effacer (ptr); – CashCow
@CashCow - Y at-il une grande différence entre les performances d'itération de tous les membres d'un ensemble std :: vs std: vector? ailleurs dans mon code, j'appelle une méthode sur chaque élément de l'ensemble, à chaque cycle. – ericsoco