16.5

16.5 函数对象

也叫函数符。 函数符可以是以函数方式与()结合使用的任意对象。
包括:函数名、指向函数的指针和重载了()运算符的类对象。
for_each第三个参数可以是常规函数, 也可以是函数符。
for_each第三个参数的声明。
template [InvalidCharacterError: "inputiterator," did not match the Name production]
Function for_each(InputIterator first, InputIterator last, Function f);

函数符概念

生成器:不用参数就可以调用的函数符。
一元函数:一个参数
二元函数:两个参数
谓词:返回bool值的一元函数
二元谓词:返回bool值的二元函数
使用类和使用函数:P708, 使用类可以将函数的参数作为类成员。

预定义的函数符

STL定义了多个基本函数符。
头文件:
plus<>():完成常规的相加运算。
transform(., ., ., out, plus()); // plus() 使用默认构造函数构造了一个函数符。不是调用函数。
对于所有的内置算术运算符、关系运算符和逻辑运算符STL都提供了等价的函数符。P711

自适应函数符和函数适配器

STL有五个相应的概念:自适应生成器、自适应一元函数、自适应二元函数、自适应谓词、自适应二元谓词。
STL使用binder1st和binder2st类自动将自适应二元函数转换位自适应一元函数。
STL提供bind1st()简化了binder1st类的使用, 提供了构造函数, 无需创建对象。
bind1st(multipies(), 2.5); // 将二元函数转换为一元
binder2st类似, 只是将常数值赋值给第二个参数,而不是第一个。——bind2st