《STL源码剖析》学习笔记
仿函数,也称函数对象。是一种具有函数特质的对象。
仿函数的主要作用在哪里?在STL所提供的算法中,往往有两个版本。其中一个版本表现出最常用的某种运算,第二个版本则表现出最泛化的演算流程,允许用户“以 template 参数来指定要采用的策略。
以 sort() 为例,其第一版本是以 operator< 为排序时的元素位置调整依据,第二个版本则允许用户指定任何”操作“,只要排序后两两相邻元素能够使该操作的结果为 true。
所以,当我们需要将某种”操作“当作算法的参数时,唯一的办法就是先将该”操作“设计为一个函数,再将函数指针作为算法的一个参数,或者是将该”操作“设计为一个所谓的仿函数(就语言层面而言是个class),再以该函数产生一个对象,并以此对象作为算法的一个参数。
既然函数指针可以达到”将整组操作作为函数参数传入算法“,那为什么还需要仿函数呢?
原因在于函数指针不能满足STL对抽象性的要求,也不能满足软件积木的要求----函数指针无法和STL其他组件搭配,产生更灵活的变化。
#include <functional> #include <iostream> using namespace std; int main() { greater<int> ig; cout << boolalpha << ig(4,6); // (A) false cout << greater<int>() (6,4); // (B) true
}
待完成
浙公网安备 33010602011771号