C++标准库分析总结(八)——<仿函数、适配器、istream_iterator、ostream_iterator、bind>...

一、仿函数定义

  仿函数是STL中最简单的部分,存在的本质就是为STL算法部分服务的,一般不单独使用。仿函数(functors)又称为函数对象(function objects),虽然函数指针虽然也可以作为算法的参数,但是函数指针不能满足STL对抽象性的要求,且无法和STL其他组件搭配,仿函数就是使一个类的使用看上去像一个函数,其实现就是类中实现一个operator(),这个类就有了类似函数的行为,就是一个仿函数类了,本质就是类重载了一个operator(),创建一个行为类似函数的对象。

  对于重载了()操作符的类,可以实现类似函数调用的过程,所以叫做仿函数,实际上仿函数对象仅仅占用1字节,因为内部没有数据成员,仅仅是一个重载的方法而已。实际上可以通过传递函数指针实现类似的功能,但是为了和STL内部配合使用,他提供了仿函数的特性。

1.1 标准库对仿函数的实现分类

  标准库目前提供了约有24个仿函数

1.2 仿函数使用

下图中myclass是我们自己写的仿函数,但是由于没有继承仿函数的公共父类,所以就不能融入到STL中

1.3 仿函数可适配的条件

  如果我们要自己写仿函数,并且融入到STL中, 就必须继承两个中的一个父类(两个操作符或者一个操作符的父类),只有继承了才能被适配器去修饰和改造

二、Adapters(适配器)

2.1 适配器定义

  把一个原本存在的东西,改成我们需要的另一种东西(把类中的函数名称改一下,接口改一改(三个参数变两个参数)),比如stack就是deque的适配器,反向迭代器也是从迭代器上改造过来的,比如a是b的适配器,对于外部来说当然我们就用a就好了,b对于我们来说就是隐藏的,但是a它只起中间桥梁作用,活还是交给b来做(b是已经存在的好东西)。

  适配器得实现方式有两种:继承和内含,STL普遍使用内含的方式。

  适配器分为三类:迭代器适配器,容器适配器,仿函数适配器。

2.2 适配器使用分类

2.2.1 容器适配器

 

2.2.2 函数适配器

2.2.1.1 bind用法

  所有bind相关的在c++11都用bind取代了

   bind可以绑定函数、函数对象、成员函数、数据成员

2.2.3 迭代器适配器

  用于改造迭代器的适配器,改造完后也是一个迭代器

  reverse_iterator叫做逆向迭代器

  inserter是改造原有的insert,会先创造这个空间然后再赋值

 三、istream_iterator、ostream_iterator

  前面总结的适配器有三大类(函数适配器,容器适配器,迭代器适配器),istream_iterator、ostream_iterator均不属于前面提到的三大类别,所以称为X适配器。

3.1 ostream_iterator

 3.2 istream_iterator

转载于:https://www.cnblogs.com/laiyingpeng/p/11274895.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值