SGI STL adapters(配接器) 13

配接器概述


配接器在STL组件的灵活组合运用功能上,扮演轴承、转换器的角色。配接器实际上是一种设计模式。将一个class的接口转化为另一个class的接口,使原本因为接口不兼容而不能工作的class,可以正常工作。
STL配接器改变容器接口称为container adapter、改变迭代器接口称为iterator adapter、改变仿函数接口称为function adapter。

container adapters

stack和queue都是配接器,底层使用deque,其方法的实现也是转调用deque。

iterator adapters

STL提供许多应用于迭代器身上的配接器,包括insert iterators, reverse iterators,iostream iterators。

insert iterators可以将一般迭代器的赋值操作转化为插入操作。

  • 尾部插入操作back_insert_iterator
  • 头部插入操作front_insert_iterator
  • 任意位置插入操作insert_insert

提供三个相应函数,提升便利性。back_inserter()front_inserter()inserter()
底层维护一个容器,当对insert iterators做赋值操作时,就在insert iterators中对该容器的迭代器做插入操作。

reverse iterator可以将一般迭代器的行进方向逆转,使原本应该前进的operator++变成后退操作,使原本应该后退的operator--变成前进操作。
有双向迭代器的容器才可使用reverse iteator迭代器。

iostream iterators可以将迭代器绑定到某个iostream对象身上。

  • istream_iterator输入能力
  • ostream_iteraotr输出能力

functor adapters

functor adapters是所有配接器中数量最庞大的一个族群,极其灵活,可以配接、配接、再配接。
functor adapters可以通过配接器间的绑定、组合、修饰能力,可以无限制创造出各种可能的表达式,搭配STL算法使用。
所有期望获得配接能力的组件,本身必须是可配接的。即一元仿函数必须继承unary_function,二元仿函数必须继承binary_function,成员函数经过mem_func处理,一般函数经过ptr_fun处理。一个未经过处理的一般函数可以传递给STL算法使用,但其无法拥有任何配接能力。