找到所有的替代版本的find_if,而不只是第一个?

Fra*_*ank 6 c++ iterator stl

是否有一个替代版本std::find_if返回所有找到的元素的迭代器,而不仅仅是第一个?

例:

bool IsOdd (int i) {
  return ((i % 2) == 1);
}

std::vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);

std::vector<int>::iterator it = find_if(v.begin(), v.end(), IsOdd);
for(; it != v.end(); ++it) {
  std::cout << "odd: " << *it << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

CB *_*ley 7

你可以使用一个for循环:

for (std::vector<int>:iterator it = std::find_if(v.begin(), v.end(), IsOdd);
     it != v.end();
     it = std::find_if(++it, v.end(), IsOdd))
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

或者,您可以将您的条件和操作放入仿函数(仅在条件为真时执行操作)并使用std::foreach.