目录
一、仿函数 functors
- 又称函数对象,为算法提供一些自定义的函数规则(例如以特定的条件实现累计 accumulate)。
- 规模较小,比较容易由用户自己实现,并加入标准库中作为自己应用的部分。
- 仿函数本质是一个类(struct),类中必须实现重载小括号(operator())使用时通过加上()来成为临时对象调用。
分类:
- 算数类 — plus、minus
- 逻辑运算类 — logical_and
- 相对关系类 — equal_to、less

标准库所提供的仿函数都有继承关系,用户定义的 functor 如果没有继承特定的类,那么就没有融入 STL 的体系结构里面。

unary 表示取一个操作数的操作, binary 表示有两个操作数。

继承的 typedef 这个技巧在标准库中多次出现,由 less 继承 binary_function(本身只有 typedef) 不会带来额外的开销。
仿函数能被修改,被适配(adaptable),被调整的话就要选择适当的 u / b function 来继承,才能真正融合到 STL 中。被 adapter 改造时 adapter 可能会提问这些 typedef 的问题(类比于算法提问迭代器中 typedef 的五个问题)。
二、函数适配器
adapter 要问问题,functor 要回答问题。
adapter 就是把既有的东西先记起来 — 通过 typedef 来实现,然后考虑如何做一些改造:比如改造函数接口,三个参数的变成两个参数的,或者改变函数名称。 也就是说 adapter 修饰了什么东西,记起来了什么东西,它就是 什么适配器。

- 迭代器适配器
- 容器适配器
- 仿函数适配器
- 未知适配器
adapter 一般通过内含的方式去实现。
1.迭代器适配器
1.1 reverse_iterator

本文详细介绍了C++ STL中的仿函数(functors)和适配器,包括迭代器适配器如reverse_iterator和inserter,以及仿函数适配器如bind2nd、not1和新标准中的bind。仿函数是一种自定义函数规则的类,适配器则用于修改既有功能,如bind2nd用于绑定第二个参数,新标准的bind则更加灵活。
最低0.47元/天 解锁文章
2万+

被折叠的 条评论
为什么被折叠?



