ElevHe

博客园 首页 新随笔 联系 订阅 管理

《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
}

待完成

posted on 2023-05-10 02:36  ElevHe  阅读(26)  评论(0)    收藏  举报