函数对象
概念
重载函数调用操作符()的类,其对象常被称为仿函数
函数对象使用重载的()时,行为类似函数调用,也叫做仿函数
本质上仿函数是一个类,并不是一个函数
函数对象使用
函数对象在使用时,可以像普通函数一样调用,可以有参数,可以有返回值
函数对象超出普通函数的概念,函数对象可以有自己的状态(例如被使用了多少次)
函数对象可以作为参数传递
谓词
一元谓词
概念
返回bool类型的仿函数称为谓词
如果operator()接受一个参数,那么叫做一元参数
如果operator()接受两个参数,那么叫做二元谓词
例如:
内建函数对象
这些内建函数对象用法和一般的函数对象完全相同
使用需要引入头文件
#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>
//取反仿函数
全都是用模板,那么复用性更高
关系仿函数
实现关系对比
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>
//小于等于
逻辑仿函数
template<class T> bool logical_and<T>
//逻辑与template<class T> bool logical_or<T>
//逻辑或template<class T> bool logical_not<T>
//逻辑非