第七章:仿函数 functors
1、STL算法接受一个函数指针或者仿函数对象作为其一个参数。但是普通函数指针不具备可配接能力。
2、STL仿函数分类:按操作数个数分为 一元仿函数、二元仿函数。(STL不支持三元仿函数)。按功能:可分为 算术运算、关系运算、逻辑运算。 要使用STL的内建仿函数,需含<functional>.
3、为了使仿函数具有可配接能力,每个仿函数需要定义自己的相应型别,如同迭代器要符合STL标准一样。仿函数的相应型别: 函数参数型别和传回值型别。 定义仿函数时只需要直接继承至STL已提供的两个基类(其中typedef 了所需的两个相应类型型别)
一元仿函数继承于:struct unary_function
二元仿函数继承于:struct binary_function
4、证同元素: “运算op的证同元素”,即元素A若与该元素做op运算,会得到自己。 例如:加法的证同元素为0;乘法的证同元素为。要获取运算op的证同元素,只需要使用 模板函数 identity_element(op<T>);即可返回op的证同元素。
5、三个函数对象:
证同:证同函数(对象)任何数据通过该函数后不会发生人任何改变,直接返回。
选择函数:接受一个pair,传回其第一或第二元素。 Select1st/select2nd;
投射函数:project1st:传回第一参数,忽略第二参数。
Project2nd:传回第二参数,忽略第一参数。