一元谓词指的是函数参数个数为一个,函数返回值为bool类型的函数对象。(一元谓词 函数参数1个,函数返回值是bool类型,可以作为一个判断式,谓词可以是一个仿函数,也可以是一个回调函数。)
学习STL的算法,一定要分清函数的参数和返回值是迭代器,还是函数对象,还是谓词。
具体看如下代码:
#include<iostream>
using namespace std;
#include "string"
#include <vector>
#include <list>
#include "set"
#include <algorithm>
#include "functional"
template<typename T>
class IsDiv
{
public:
IsDiv(const T& divisor)
{
this->divisor = divisor;
}
bool operator()(T& t) //一元谓词,函数参数是一个,返回值是bool类型
{
return (t % divisor == 0);
}
protected:
private:
T divisor;
};
void main()
{
vector<int> v2;
for (int i = 10; i < 33; i++)
{
v2.push_back(i);
}
int a = 4;
IsDiv<int> myDiv(a);
//find_if返回值是一个迭代器
//要点:分清楚STL算法返回的值是迭代器还是谓词(函数对象)是STL算法入门的基础
vector<int>::iterator it;
it = find_if(v2.begin(), v2.end(), IsDiv<int>(a));
if (it == v2.end())
{
cout << "容器中没有被4整除的元素" << endl;
}
else
{
cout<<"第一个被4整除的元素是:"<<*it<<endl; //输出:第一个被4整除的元素是:4
}
}