概念:
返回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;
}
运行结果: