谓词
- 返回
bool类型的仿函数
一元谓词
接收一个参数的仿函数
- 定义
class GreaterFive
{
public:
bool operator()(int val)
{
return val > 5;
}
};
- 使用,查找vector容器大于5的数,这个规则是谓词定义的
int main()
{
vector<int> v;
for (int i = 0; i < 10; i++)
{
v.push_back(i);
}
vector<int>::iterator it = find_if(v.begin(), v.end(), GreaterFive());
if(it == v.end())
{
cout << "no find" << endl;
}
else
{
cout << *it << endl;
}
return 0;
}
二元谓词
接收两个参数的仿函数
- 定义
class Decrease
{
public:
bool operator()(int val1, int val2)
{
return val1 > val2;
}
};
sort排序默认是升序,使用谓词重新定义规则为降序
int main()
{
vector<int> v;
v.push_back(10);
v.push_back(30);
v.push_back(50);
v.push_back(60);
v.push_back(20);
sort(v.begin(), v.end(), Decrease());
for(int i : v)
{
cout << i << endl;
}
return 0;
}
内建仿函数
所需头文件#include<functional>
算术仿函数
template<class T> T plus<T>加法仿函数template<class T> T minus<T>减法仿函数template<class T> T multiplies<T>乘法仿函数template<class T> T divides<T>除法仿函数template<class T> T modulus<T>取模仿函数template<class T> T negate<T>取反仿函数
加法和取反的用法
分别演示两个参数和一个参数的用法
int main()
{
plus<int> add;
cout << add(10, 20) << endl;
negate<int> n;
cout << n(50) << endl;
return 0;
}
输出结果为
30
-50
关系仿函数
可以当做谓词
template<class T> bool equal_to<T>等于template<class T> bool not_equal_to<T>不等于template<class T> bool greater<T>大于template<class T> bool greater_equal<T>大于等于template<class T> bool less<T>小于template<class T> bool less_equal<T>小于等于
大于的用法
int main()
{
vector<int> v;
v.push_back(10);
v.push_back(30);
v.push_back(50);
v.push_back(60);
v.push_back(20);
sort(v.begin(), v.end(), greater<int>());
for(int i : v)
{
cout << i << endl;
}
return 0;
}
修改sort的排序规则为降序,使用内建仿函数,就不需要自己定义了,和二元谓词类似
逻辑仿函数
template<class T> bool logical_and<T>逻辑与template<class T> bool logical_or<T>逻辑或template<class T> bool logical_not<T>逻辑非

557

被折叠的 条评论
为什么被折叠?



