加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C++标准库分析总结(八)——<仿函数、适配器、istream_iterato

发布时间:2020-12-16 10:48:06 所属栏目:百科 来源:网络整理
导读:一、仿函数定义 仿函数是STL中最简单的部分,存在的本质就是为STL算法部分服务的,一般不单独使用。仿函数(functors)又称为函数对象(function objects),虽然函数指针虽然也可以作为算法的参数,但是函数指针不能满足STL对抽象性的要求,且无法和STL其他

一、仿函数定义

  仿函数是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 函数适配器

  所有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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读