У меня есть набор элементов, которые мне нужно оперировать, вызывая функции-члены в коллекции:
std::vector<MyType> v;
... // vector is populated
Для вызова функций без аргументов это довольно прямолинейно:
std::for_each(v.begin(), v.end(), std::mem_fun(&MyType::myfunc));
Аналогичная вещь может быть выполнена, если есть один аргумент функции, которую я хочу вызвать.
Моя проблема в том, что я хочу вызвать функцию для элементов в векторе, если она удовлетворяет некоторому условию. std::find_if
возвращает итератор первому элементу, удовлетворяющему условиям предиката.
std::vector<MyType>::iterator it =
std::find_if(v.begin(), v.end(), MyPred());
Я хочу найти все элементы, отвечающие предикату и работающие над ними.
Я рассматривал алгоритмы STL для эквивалента "find_all
" или "do_if
" или способ, которым я могу это сделать с существующим STL (например, что мне нужно только один раз повторить), а чем сворачивать мою собственную или просто выполнять стандартную итерацию, используя цикл for и сравнения.