2012-06-14 21 views
15

Tengo un std::vector lleno de objetos. Quiero filtrar y copiar todos los elementos para los cuales algún predicado devuelve true en un nuevo std::vector.¿Cómo hacer std :: vector de otro vector con filtro específico?

He observado las funciones find y search pero solo devuelven iteradores.

Estoy usando ObjC++ para que pueda usar funciones de bloque así como funtores, si esto ayuda. Sin embargo, no se pueden usar las funciones de C++ 11.

Respuesta

15

Si tiene C++ 11 entonces use std::copy_if como se sugiere en la respuesta de Eugen. De lo contrario, puede usar std::remove_copy_if con las modificaciones apropiadas en la lógica de su predicado.

+0

@Protheus "remove_copy_if" no es exactamente intuitivo, por lo que es fácil pasar por alto. Afortunadamente C++ 11 finalmente nos da 'copy_if'. – juanchopanza

11

puede usar el método std :: copy_if. Ver here.

+1

¡Ah, así que finalmente está ahí en C++ 11! Iba a sugerir una implementación enrollada a mano a la http://lists.boost.org/Archives/boost/2001/01/8022.php. –