CE :FunctionObjects

  • 前面章节很多STL算法用仿函数(函数对象)
    • 也称函数符
  • 函数符是以函数方式与括号()结合使用的任意对象
  • FunctionObjects,函数对象
  • 更通俗
    • 仿函数是将函数作为参数传递的使用方式
    • 如:逻辑谓词、算术运算、抽取信息等

13.1仿函数的概述

  • 仿函数的概念是学习仿函数的基础和根本
  • 仿函数的概念和仿函数的作用

13.1.1仿函数的概念

  • 仿函数: 定义了operator()的对象
  • 仿函数可视为一般函数
  • 不同之处:
    • 仿函数的功能是在其成员函数operator()中实现
  • 仿函数的定义形式比较复杂,但仿函数的优点有3:
  • (1)比一般函数更灵巧,因为仿函数拥有状态。
  • 对于仿函数,可拥有两个状态不同的实体。
    • 普通函数是不能实现该目的的。
  • (2)每个仿函数都有其型别。
    • 因此仿函数的型别可以作为模板参数,实现指定某种行为的目的
      容器型别不会和具体仿函数有关,而仅仅是该型别的仿函数均可使用。
  • (3)仿函数比函数指针的执行速度快多
    • C++中,函数调用通常用指针,当需要调用函数时,只需要函数的地址(名称)即可
    • 地址调用方法的缺陷是效率低,为提高效率需要使用仿函数的形式
    • 定义的仿函数被调用时,是用运算符operator()
    • 通过对运算符进行自定义,能显著提效

  • 仿函数均是以类似函数的形式被调
  • 仿函数均含成员函数operator()
    • 仿函数的共同点
  • 仿函数的基类是:

CE :FunctionObjects

  • 这两个类的用途是为参数提供标准的名字
    • 规定返回值类型
    • 使程序员可从这两个基类派生出相应的自己的类

  • unary_function是空的基类,没有任何的成员函数和成员变量,仅仅包含型别信息。
  • 该基类是为了让Adaptable Unary Function models的定义更方便。
  • Adaptable Unary Function的 models必须包含嵌套的型别声明
    • 继承unary_function是获得嵌套型別的最简单办法