【STL】安插型迭代器(Insert Iterator)或插入器(inserter)
【STL】插入型迭代器(Insert Iterator)或插入器(inserter)
1. 定义
插入型迭代器(Insert Iterator),又叫插入器(Inserter)。
2. 作用
插入迭代器的主要功能为把一个赋值操作转换为把相应的值插入容器的操作。
算法库对所有在容器上的操作有约束:决不修改容器的大小(不插入、不删除)。有了插入迭代器,既使得算法库可以通过迭代器对容器插入新的元素,又不违反这一统带,即保持了设计上的一致性。
3. 类型
3.1 尾部插入器(back_insert_iterator)
使用:通过调用容器的push_back()成员函数来插入元素
功能:在容器的尾端插入元素
限制:只有提供了push_back()成员函数的容器中
适用:vector deque list
3.2 头部插入器(front_insert_iterator)
使用:通过调用容器的push_front()成员函数来插入元素
功能:在容器的前端插入元素
限制:只有提供了push_front()成员函数的容器中
适用:deque list
3.3 普通插入器(insert_iterator)
使用:通过调用insert()成员函数来插入元素,并由用户指定插入位置
功能:在容器的指定位置插入元素
限制:所有STL容器都提供了insert()函数.
适用:所有STL容器
4. 例子
1. 定义
插入型迭代器(Insert Iterator),又叫插入器(Inserter)。
2. 作用
插入迭代器的主要功能为把一个赋值操作转换为把相应的值插入容器的操作。
算法库对所有在容器上的操作有约束:决不修改容器的大小(不插入、不删除)。有了插入迭代器,既使得算法库可以通过迭代器对容器插入新的元素,又不违反这一统带,即保持了设计上的一致性。
3. 类型
3.1 尾部插入器(back_insert_iterator)
使用:通过调用容器的push_back()成员函数来插入元素
功能:在容器的尾端插入元素
限制:只有提供了push_back()成员函数的容器中
适用:vector deque list
3.2 头部插入器(front_insert_iterator)
使用:通过调用容器的push_front()成员函数来插入元素
功能:在容器的前端插入元素
限制:只有提供了push_front()成员函数的容器中
适用:deque list
3.3 普通插入器(insert_iterator)
使用:通过调用insert()成员函数来插入元素,并由用户指定插入位置
功能:在容器的指定位置插入元素
限制:所有STL容器都提供了insert()函数.
适用:所有STL容器
4. 例子
#include <iostream> #include <vector> #include <list> #include <iterator> using namespace std; template<typename T> void PrintElements(T c) { T::const_iterator itr = c.begin(); while(itr != c.end()) cout << *itr++ <<" "; } int main() { vector<int> vecSrc; list<int> vecDest; for(vector<int>::size_type i = 0; i < 3; ++i) vecSrc.push_back(i); // 1. 类back_insert_iterator与函数back_inserter // explicit back_insert_iterator(Container& _Cont); // template<class Container> back_insert_iterator<Container> back_inserter(Container& _Cont); copy(vecSrc.begin(), vecSrc.end(), back_insert_iterator<list<int> >(vecDest)); // copy(vecSrc.begin(), vecSrc.end(), back_inserter(vecDest)); // 效果一样 PrintElements(vecDest); cout << endl; // 2. 类front_insert_iterator与函数front_inserter // explicit front_insert_iterator(Container& _Cont); // template<class Container> front_insert_iterator<Container> front_inserter(Container& _Cont); copy(vecSrc.begin(), vecSrc.end(), front_insert_iterator<list<int> >(vecDest)); // copy(vecSrc.begin(), vecSrc.end(), front_inserter(vecDest)); PrintElements(vecDest); cout << endl; // 3. 类insert_iterator与函数inserter // insert_iterator(Container& _Cont, typename Container::iterator _It); // template<class Container> insert_iterator<Container> inserter(Container& _Cont, typename Container::iterator _Where); copy(vecSrc.begin(), vecSrc.end(), insert_iterator<list<int> >(vecDest, ++vecDest.begin())); // copy(vecSrc.begin(), vecSrc.end(), inserter(vecDest, ++vecDest.begin())); PrintElements(vecDest); return 0; }运行结果:
0 1 2 2 1 0 0 1 2 2 0 1 2 1 0 0 1 2 请按任意键继续.