C++迭代器之'插入迭代器
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()函数.
适用:提供了insert()函数的STL容器
例子:
1 #include <iostream> 2 #include <vector> 3 #include <list> 4 #include <iterator> 5 #include <queue> 6 #include <set> 7 using namespace std; 8 9 int main() 10 { 11 vector<int> V; 12 list<int> L; 13 14 for(int i = 0; i < 10; ++i) 15 V.push_back(i %5); 16 17 18 //back_inserter 19 copy(V.begin(), V.end(), back_inserter(L)); 20 21 list<int>:: iterator it; 22 for(it = L.begin(); it != L.end(); it++) 23 { 24 cout <<*it<<" "; 25 } 26 cout << endl; 27 28 // front_inserter 29 deque<int> dq; 30 copy(V.begin(), V.end(), front_inserter(dq)); 31 32 deque<int>:: iterator it1; 33 for(it1 = dq.begin(); it1 != dq.end(); it1++) 34 { 35 cout <<*it1<<" "; 36 } 37 cout << endl; 38 // insert_iterator 39 set<int> s; 40 copy(L.begin(), L.end(), inserter(s, s.begin())); 41 set<int>::iterator it2; 42 for(it2 = s.begin(); it2 != s.end(); it2 ++) 43 { 44 cout<<*it2<<" "; 45 } 46 47 return 0; 48 }