У меня есть коллекция элементов, с которыми мне нужно работать, вызывая функции-члены для коллекции:
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 и сравнения.