STL源码剖析总结_第八章配接器
- 格式:pdf
- 大小:2.91 MB
- 文档页数:16
8 配接器
8.1 配接器之概观与分类
1、设计模式中对配接器的定义如下:将一个class的接口转换为另一个class的接口,使原本因接口不兼容而不能合作的classes可以一起运作。
2、容器配接器(应用于容器)
stack和queue是两个容器配接器,底层默认由deque构成。stack封住了所有的deque对外接口,只开放符合stack原则的几个函数;queue封住了所有的deque 对外接口,只开放符合queue原则的几个函数。
3、迭代器配接器(应用于迭代器)
3.1 insert iterators
可以把一般迭代器的复制操作转变为插入操作。
insert iterators包括back_insert_iterator(专门负责尾端插入),front_insert_iterator (专门负责头端插入)和insert_iterator(可以负责任何位置执行插入)。主要观念是,每个insert iterators内部都维护有一个容器;容器有自己的迭代器,当客户端对insert iterators做赋值操作时,就在insert iterators中转为对该容器的迭代器做插入操作,其他的迭代器功能则被关闭。
3.2 reverse iterators
reverse iterators将迭代器的行进方向逆转,使原本应该前进的operator++变成了后退操作,原本后退的operator—操作变成了前进操作。当迭代器被逆转,虽然实体位置不变,但逻辑位置必须改变,主要是为了配合迭代器区间的“前闭后开“习惯。
3.3 IOStream iterators
IOStream iterators可以将迭代器绑定到某个iostream对象身上。绑定一个istream object(例如:std::cin),称为istream_iterator,拥有输入功能。绑定到ostream object (例如:std::cout),称为ostream_iteratpr,拥有输出功能。内部维护一个istream member,客户端对这个迭代器做的operator++操作,会被导引调用内部所含的那个istream member的输入操作。绑定一个ostream object,就是在ostream iterator内部维护一个ostream member,客户端对这个迭代器做的operator=操作,会被导引调用内部所含的那个ostream member的输出操作。
3.4 运用实例
4、仿函数配接器
仿函数配接操作包括绑定(bind)、否定(negate)、组合(compose)、以及对一般函数或成员函数的修饰。仿函数配接器的价值在于,通过它们之间的绑定、组合、修饰能力,几乎可以创造出各种可能的表达式,配合STL算法。每一个仿函数配接
器内藏了一个member object,其型别等同于它所要配接的对象。
运用实例
1)对返回值进行逻辑否定:not1,not2
2)对参数进行绑定:bind1st,bind2nd
3)用于函数合成:compose1,compose2
compose1是h(x)=f(g(x)), compose2是h(x)=f(g1(x),g2(x))
举例:
4)用于函数指针:ptr_fun
将一般函数当作仿函数使用。
举例:
5)用于成员函数指针:mem_fun,mem_fun_ref
运用实例