Iterator Adapter 继承了通用iterator的接口,但是实现特定的业务逻辑。
C++ STL 提供了三种类型的iterator adapters:
1. Insert iterators
Insert iterators 使algorithms 以insert的模式工作,而非overwrite, 比如在copy 算法中,应用insert iterators 我们可以不用care 目标container的空间长度增加需求。
有三种insert iterators 根据插入的位置:
1> back_inserter, 尾部插入
只能用于提供了push_back()成员函数的容器,比如vector, deque和list.
2> front_inserter,前端插入
只能用于提供了push_front的成员函数的容器,比如deque和list.
3> inserter, 给定位置插入
直接将元素(elements)插入到给定位置的前面,例如:
source collection: 1 , 2 ,3 ,4
position = 3.
insert collection: 8,9
result: 1,2,8,9,3,4,(而非1,2,3,8,9,4)
inserter实际上调用对应容器的insert成员函数,因为所有预定义的容器都实现了insert()成员函数,所以这是唯一支持关联容器(associative containers)的预定义的inserter ,当然也支持顺序容器(sequence containers).但是要注意的是我们不能把元素插入到
关联容器的指定位置,因为对于关联容器,元素的位置是由其值来决定的。比如set, 我们用inserter把4插入到1,2,3,5的3前面,得到的新
序列是1,2,3,4,5,而不是我们期望的1,2,4,3,5
2. Stream iterators
i.e. ostream_iterator 和istream_iterator.
3. Reverse iterators
i.e. reverse_iterator.
如下代码做了同样的操作,即反向输出coll中的元素