1.仿函数
1.1 定义:
本质是一个类,是一个像使用函数一样直接名称+括号就可以调用的类,事实上就是一个重载了operator()函数的类。
1.2 目的:
具有内部状态的功能,这是函数所不能比拟的。
1.3 例子:
最后的结果可能根据STL的实作可能会有所区别。
2 函数配接器:
2.1 定义:
函数配接器是一种特殊的仿函数。能够将仿函数和另外一个仿函数结合起来的函数或者说是一个将仿函数作为参数的仿函数。预先定义好的函数配接器有
bind1st(op, value),
bind2nd(op, value),
not1(op),
not2(op)
2.2 分类:
函数适配器有两种:
针对一般函数(非成员函数)而设计的函数适配器
针对成员函数而设计的函数适配器
2.3 针对一般函数(非成员函数)而设计的函数适配器:
这种是我们最经常使用的用法。通过函数适配器对一个参数进行绑定。
2.4 针对成员函数而设计的函数配接器
这里所说的成员函数不包括operator(). 这种用法不多见。是通过mem_fun_ref进行转换,将原本针对某个元素的函数调用转为调用被传递变量(*itr itr为iv的迭代器)的成员函数。
2.5 可以使用函数配接器的自定义仿函数
函数配接器只能用在系统仿函数(例如less)中,如果我们想要我们的仿函数能够使用函数配接器,必须然类从unary_function或binary_function派生而来。因为函数适配器里面用到了参数的特定成员(例如T1::argument_type, T1::result_type),所以我们只要在类继承列表里添加
public std::unary_function<T1,T1>
或public std::binary_function<T1,T2,T1>即可