C++ STL标准库 仿函数和适配器

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

目录

一、仿函数 functors

二、函数适配器 

1.迭代器适配器

1.1 reverse_iterator

1.2 inserter

2.容器适配器

3.仿函数适配器

3.1 bind2nd

3.2 not1

3.3 新型适配器 bind

4.未知适配器

4.1 ostream_iterator 输出流迭代器

4.1 istream_iterator 输入流迭代器


一、仿函数 functors

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

分类:

  1. 算数类 — plus、minus
  2. 逻辑运算类 — logical_and
  3. 相对关系类 — 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

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值