谓词

概念

返回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;
}

运行结果:
谓词_ios_02