C++之插入迭代器

C++的迭代器适配器中常用的有插入迭代器(Inser Iterator)、流迭代器(Stream Iterator)和逆向迭代器(Reverse Iterator)等!

本文主要是介绍插入迭代器(Inser Iterator).下面介绍三种插入迭代器:

1.Back Inserter

原理:其内部调用push_back()

功能:在容器的尾端插入元素

限制:只有提供了push_back()成员函数的容器中,back inserter才能派上用场

适用:vector deque list

 

2.Front Inserter

原理:其内部调用push_front()

功能:在容器的前端插入元素

限制:只有提供了push_front()成员函数的容器中,front inserter才能派上用场

适用:deque list

 

3.Inserter

原理:其内部调用insert()

功能:在容器的指定位置插入元素

限制:只有提供了insert()成员函数的容器中,inserter才能派上用场. 所有STL容器都提供了insert()函数.

适用:所有STL容器

 

 1 #include <iostream>
 2 #include <vector>
 3 #include <list>
 4 #include <deque>
 5 #include <iterator>
 6 #include <set>
 7 
 8 int main() {
 9 
10     typedef std::list<int> IntList;
11     IntList intList;
12     IntList::const_iterator listIt;
13     for(int i = 1; i <= 9; ++i) {
14         intList.push_back(i);
15     }
16     std::cout << "list data:\n";
17     for(listIt = intList.begin(); listIt != intList.end(); ++listIt) {
18         std::cout << *listIt << ' ';
19     }
20 
21     typedef std::vector<int> IntVector;
22     IntVector intVector;
23     IntVector::const_iterator vectorIt;
24     copy(intList.begin(), intList.end(), back_inserter(intVector));  ///back inserter
25     std::cout<<"\nvector data:\n";
26     for(vectorIt = intVector.begin(); vectorIt != intVector.end(); ++vectorIt) {
27         std::cout << *vectorIt << ' ';
28     }
29 
30     copy(intList.begin(), intList.end(), inserter(intVector, intVector.begin() + 5));  ///inserter (container pos_iter)
31     std::cout << "\nvector data after insert:\n";
32     for(vectorIt = intVector.begin(); vectorIt != intVector.end(); ++vectorIt){
33         std::cout << *vectorIt << ' ';
34     }
35 
36     typedef std::deque<int> IntDeque;
37     IntDeque intDeque;
38     IntDeque::const_iterator dequeIt;
39     copy(intList.begin(), intList.end(), front_inserter(intDeque));  ///front inserter
40     copy(intList.begin(), intList.end(), inserter(intDeque, intDeque.begin() + 5));  ///inserter
41     std::cout << "\ndeque data:\n";
42     for(dequeIt = intDeque.begin(); dequeIt != intDeque.end(); ++dequeIt) {
43         std::cout << *dequeIt << ' ';
44     }
45 
46     typedef std::set<int> IntSet;
47     IntSet intSet;
48     IntSet::const_iterator setIt;
49     copy(intList.begin(), intList.end(), inserter(intSet, intSet.begin()));  ///inserter
50     std::cout << "\nset data:\n";
51     for(setIt = intSet.begin(); setIt != intSet.end(); ++setIt) {
52         std::cout << *setIt << ' ';
53     }
54 
55     return 0;
56 }

 

posted on 2015-01-21 17:42  sponge_wxy  阅读(125)  评论(0)    收藏  举报

导航