c++如何让find_if函数能查找多个符合条件的值?

find_if只能返回第一个查找的值,如果我想返回容器里所有符合条件的值应当如何修改程序?我用指针自增的方法不起作用!!!万望详解!!在网上实在没找到,迫不得已来求助,感激不尽
我用vector存int数据时成功了但用vector存结构体时就没有输出了,这是怎么回事?

  find_if算法用来查找容器内的符合条件的元素

  举例如下:

  第一种方式 :在仿函数的构造函数中保存要比较的值。

  

  先写仿函数:

  

  最后是调用find_if算法:

  先包含头文件:

  

  2. 第二种方式 :使用

  binary_function  å’Œ

  bind2nd

  如果要对自己的仿函数使用blind2nd等适配器,必须让自己的仿函数从binary_function继承。

  bind2nd表示绑定第2个参数,也可以用bind1st来绑定第一个参数。

  代码示例如下:

  

  最后是调用find_if算法:

  先包含头文件:

  

  这个例子也是先找到第一个符合条件的元素,然后再将其删除出容器。

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2016-06-05

你可以在一个循环在连续使用find_if。 vector存结构是什么意思? 看看下面的代码:

#include<iostream>
#include<vector>
#include<iterator>
#include<algorithm>
#include<string>
using namespace std;
typedef struct StudentInfo {
 int id;
 string name;
} STUINFO;
bool IsOddId (STUINFO info) {
  return ((info.id%2)==1);
}
int main(int argc, char** argv)
{
 vector<STUINFO> v;
 vector<STUINFO>::iterator iter, it_end;
 
 STUINFO temp;
 temp.id = 100;
 temp.name = "Jack";
 v.push_back(temp);
 temp.id = 101;
 temp.name = "Sam";
 v.push_back(temp);
 temp.id = 102;
 temp.name = "John";
 v.push_back(temp);
 temp.id = 103;
 temp.name = "Tom";
 v.push_back(temp);
 
 iter = v.begin();
 it_end = v.end(); 
 while(true) {
  iter = find_if(++iter, v.end(), IsOddId);   
  if (iter != it_end )
   cout << "ID: " << (*iter).id << ", Name: " << (*iter).name <<endl;  
  else
   break;  
 }
}

运行结果:

ID: 101, Name: Sam
ID: 103, Name: Tom

追问

我也是这么做的 为什么输出无结果?

追答

呵呵,想通了就好~, begin(), end()要等到vector构造好了才行,毕竟不是array ~~~

本回答被提问者和网友采纳
第2个回答  2019-05-16
兄弟你解决了吗,我也碰到这个问题了
相似回答