2010-08-06 15 views
10

Tengo un contenedor y me gustaría borrar elementos basados ​​en un predicado. Erase_if suena familiar, pero no puedo encontrarlo en C++. ¿Cuál es el nombre y dónde se define? Me gustaría usarlo con una lambda en VS10.¿Dónde está erase_if?

Respuesta

0

creo que desea remove_if

18

Probablemente se esté buscando std::remove_if, en un patrón como:

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

Y lo encontrará en '' , junto con los otros algoritmos estándar. –

+0

borra el elemento único – Sergei

0

Hay una list::remove_if, pero no para todas las clases de contenedores. remove_if también existe como un algoritmo, que se puede utilizar con los iteradores que puede obtener de begin() y end().

4

Supongo que estás pensando en remove_if que toma un predicado para determinar si el elemento debe ser eliminado.

remove_if devuelve un iterador que apunta al comienzo de los elementos para eliminar en el contenedor. Para eliminar realmente los necesita utilizar erase:

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

O eso, o tal vez que ha llamado erróneamente el algoritmo copy_if? Que de alguna manera quedó fuera del estándar pero fue escrito sobre e implementado en Effective STL.

+0

borra el elemento individual – Sergei