一.谓词概念
谓词是指普通函数或重载的operator()返回值是bool类型的函数对象(仿函数)。如果operator接受一个参数,那么叫做一元谓词,如果接受两个参数,那么叫做二元谓词,谓词可以作为一个判断式。
struct myfuncobj01 {
bool operator(int v){}//接受一个参数,并且返回值为bool,即为一元谓词
};
bool compare01(int v){}//同样是一元谓词
struct myfuncobj02 {
bool operator(int v1,int v2) {}//接受两个参数,并且返回值为bool,即为二元谓词
};
bool compare02(int v1,int v2) {}//同样是二元谓词
二.内建函数对象
STL内建了一些函数对象。分为:算数类函数对象、关系运算类函数对象、逻辑运算类仿函数。这些仿函数产生的对象,用法和一般函数完全相同,当然我们还可以产生无名的临时对象来履行函数功能。使用内建函数对象,需要引入头文件:
#include<functional>
1.六个算数类函数对象,除了negate是一元运算,其他都是二元运算
template<class T> T plus<T>//加法仿函数
template<class T> T minute<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>//取反仿函数
测试:
plus<int> myplus;
cout << myplus(10, 20) << endl;
2.六个关系运算类函数对象,每一种都是二元运算
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>//小于等于
3.逻辑运算类运算函数,not为一元运算,其余为二元运算
template<class T> bool logical_and<T>//逻辑与
template<class T> bool logical_or<T>//逻辑或
template<class T> bool logical_not<T>//逻辑非