谓词
概念:
返回bool类型的仿函数称为谓词
如果operator()接受一个参数,叫做一元谓词
如果operator()接受两个参数,叫做二元谓词
查找数:
find_if(v.begin(),v.end(),谓词名称) //需要头文件#include < algorithm>
返回的是指向对应位置的迭代器,没有找到返回v.end()
一元谓词例子:
#include <iostream> using namespace std; #include <string> #include <vector> #include <algorithm> class GreatFive { public: bool operator()(int val) //为一元谓词 { return val>5; //返回比较的结果,就是大于5的数 } }; //仿函数 返回值类型是bool数据类型,成为谓词 //一元谓词 void test() { vector<int> v; for(int i=0;i<10;i++) { v.push_back(i); } vector<int>::iterator it = find_if(v.begin(),v.end(),GreatFive()); //找到返回指向对应位置的迭代器,没有找到返回v.end() if(it!=v.end()) //进行判断 { cout<<"对应的位置为"<<*it<<endl; } else { cout<<"没有找到"<<endl; } } int main() { test(); system("pause"); return 0; }
运行结果:
二元谓词例子
二元谓词可用于容器排序,如vector容器
例子:
#include <iostream> using namespace std; #include <string> #include <vector> #include <algorithm> class GreatFive { public: bool operator()(int val,int val2) //为二元谓词 { return val>val2; } }; //仿函数 返回值类型是bool数据类型,成为谓词 //二元谓词 void test() { vector<int> v; for(int i=0;i<10;i++) { v.push_back(i); } sort(v.begin(),v.end(),GreatFive()); //增加一个谓词 for(vector<int>::iterator it = v.begin();it!=v.end();it++) { cout<<*it<<" "; } } int main() { test(); system("pause"); return 0; }
运行结果: