2010-08-06 4 views
10

J'ai un conteneur et j'aimerais effacer des éléments basés sur un prédicat. Erase_if semble familier, mais je ne le trouve pas en C++. Quel est le nom et où est-il défini? Je voudrais l'utiliser avec un lambda dans VS10.Où est erase_if?

Répondre

0

Je crois que vous voulez remove_if

18

Vous êtes probablement pour std::remove_if, dans un motif tel que:

vec.erase(std::remove_if(vec.begin(), vec.end(), predicate), vec.end()); 
+3

Et vous trouverez dans '' , ainsi que les autres algorithmes standards. –

+0

efface élément unique – Sergei

0

Il y a un list::remove_if, mais pas pour toutes les classes de conteneurs. remove_if existe également en tant qu'algorithme, qui peut être utilisé avec les itérateurs que vous pouvez obtenir à partir de begin() et de end().

4

Je suppose que vous pensez à remove_if qui prend un prédicat pour déterminer si l'élément doit être retiré.

remove_if renvoie un itérateur pointant vers le début des éléments à supprimer dans le conteneur. Pour les supprimer en fait, vous devez utiliser erase:

container.erase(remove_if(container.start(), container.end(), pred), container.end()) 

Soit ça ou peut-être vous l'avez rappelé à tort l'algorithme copy_if? Qui d'une manière ou d'une autre a été exclu de la norme mais a été écrit à propos de - et mis en œuvre - dans Effective STL.

+0

efface un seul élément – Sergei