目录
1 适配器简介
2 适配器使用分类
2.1 容器适配器
2.2 函数适配器
2.2.1 常见的函数适配器
2.2.2 bind2nd
2.2.3 not1
2.2.4 bind用法
2.3 迭代器适配器
2.4 X适配器
1.6.1 ostream_iterator
1.6.2 istream_iterator
1 适配器简介
把一个原本存在的东西,改成我们需要的另一种东西(把类中的函数名称改一下,接口改一改(三个参数变两个参数)),比如stack就是deque的适配器,反向迭代器也是从迭代器上改造过来的,比如a是b的适配器,对于外部来说当然我们就用a就好了,b对于我们来说就是隐藏的,但是a它只起中间桥梁作用,活还是交给b来做(b是已经存在的好东西)。
适配器在STL组件的灵活组合运用功能上,扮演着轴承、转换器的角色。
适配器的实现方式有两种:继承和内含,STL普遍使用内含的方式。
适配器分为三类:迭代器适配器,容器适配器,仿函数适配器。
- 1)改变仿函数接口者,称为函数适配器;对于函数适配器,适配器他也需要获得对应的仿函数一些信息。
- 2)改变容器接口者,称为容器适配器;
- 3)改变迭代器接口者,称为迭代器适配器
2 适配器使用分类
适配器分为三类:
- 迭代器适配器
- 容器适配器
- 仿函数适配器
2.1 容器适配器
STL提供两个容器适配器:queue和stack,它们修饰deque的接口而生成新的容器风貌stack的底层由deque构成。
- stack封锁住了所有的deque对外接口,只开放符合stack原则的几个函数
- queue的底层也由deque构成。queue封锁住了所有的deque对外接口,只开放符合queue原则的几个函数
2.2 函数适配器
2.2.1 常见的函数适配器
2.2.2 bind2nd
从bind2nd这个函数,我们可以看到函数适配器的一些巧妙之处。
对于模板,我们知道:
- 1.对于类模板,它必须指明类中元素的类型,而不能由类自己推导
- 2.对于函数模板,它有能力自己推导传入的参数类型。
vector<int> vec; //这个int表明我们必须声明类中元素类型
max(1,2); //即使我们不声明参数1和2的类型,函数max也可以为我们自动推导出他们的类型。
2.2.3 not1
2.2.4 bind用法
所有bind相关的在c++11都用bind取代了。
bind可以绑定函数、函数对象、成员函数、数据成员。
2.3 迭代器适配器
用于改造迭代器的适配器,改造完后也是一个迭代器
reverse_iterator叫做逆向迭代器
inserter是改造原有的insert,会先创造这个空间然后再赋值
2.4 X适配器
前面总结的适配器有三大类(函数适配器,容器适配器,迭代器适配器),istream_iterator、ostream_iterator均不属于前面提到的三大类别,所以称为X适配器。
1.6.1 ostream_iterator
1.6.2 istream_iterator
作者:灼光
出处:灼光 - 博客园
本博客文章大多为原创,转载请在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。