Tengo una colección de elementos que necesito para operar sobre, llamando a las funciones miembro de la colección:usando STL para encontrar todos los elementos de un vector
std::vector<MyType> v;
... // vector is populated
Para las llamadas a funciones con argumentos que es bastante recta hacia adelante :
std::for_each(v.begin(), v.end(), std::mem_fun(&MyType::myfunc));
algo similar se puede hacer si hay un argumento a la función que desea llamar.
Mi problema es que quiero llamar a una función en elementos en el vector si cumple alguna condición. std::find_if
devuelve un iterador al primer elemento que cumple las condiciones del predicado.
std::vector<MyType>::iterator it =
std::find_if(v.begin(), v.end(), MyPred());
Deseo encontrar todos elementos que cumplen el predicado y operar sobre ellos.
He estado buscando en los algoritmos de STL para un "find_all
" o "do_if
" equivalente, o alguna manera de hacer esto con la STL existente (por ejemplo que sólo tengo que repetir una vez), en lugar de rodar mi propio o simplemente hacer una iteración estándar usando un bucle for y comparaciones.
Partición funcionaría en un caso general, pero para este caso concreto, no funcionará, ya que el vector es invariable . – twokats