CE :FunctionObjects
文章目录
- 前面章节很多STL算法用仿函数(函数对象)
- 也称函数符
- 函数符是以函数方式与括号()结合使用的任意对象
- FunctionObjects,函数对象
- 更通俗
- 仿函数是将函数作为参数传递的使用方式
- 如:逻辑谓词、算术运算、抽取信息等
13.1仿函数的概述
- 仿函数的概念是学习仿函数的基础和根本
- 仿函数的概念和仿函数的作用
13.1.1仿函数的概念
- 仿函数: 定义了operator()的对象
- 仿函数可视为一般函数
- 不同之处:
- 仿函数的功能是在其成员函数operator()中实现
- 仿函数的定义形式比较复杂,但仿函数的优点有3:
- (1)比一般函数更灵巧,因为仿函数拥有状态。
- 对于仿函数,可拥有两个状态不同的实体。
- 普通函数是不能实现该目的的。
- (2)每个仿函数都有其型别。
- 因此仿函数的型别可以作为模板参数,实现指定某种行为的目的
容器型别不会和具体仿函数有关,而仅仅是该型别的仿函数均可使用。
- 因此仿函数的型别可以作为模板参数,实现指定某种行为的目的
- (3)仿函数比函数指针的执行速度快多
- C++中,函数调用通常用指针,当需要调用函数时,只需要函数的地址(名称)即可
- 地址调用方法的缺陷是效率低,为提高效率需要使用仿函数的形式
- 定义的仿函数被调用时,是用运算符operator()
- 通过对运算符进行自定义,能显著提效
- 仿函数均是以类似函数的形式被调
- 仿函数均含成员函数operator()
- 仿函数的共同点
- 仿函数的基类是:
- 这两个类的用途是为参数提供标准的名字
- 规定返回值类型
- 使程序员可从这两个基类派生出相应的自己的类
- unary_function是空的基类,没有任何的成员函数和成员变量,仅仅包含型别信息。
- 该基类是为了让Adaptable Unary Function models的定义更方便。
- Adaptable Unary Function的 models必须包含嵌套的型别声明
- 继承unary_function是获得嵌套型別的最简单办法