反转迭代器和插入迭代器的区别

反转迭代器顾名思义,反向操作容器,而插入迭代器是将迭代器的赋值操作转换为push_back(),push_front(),insert()操作。插入迭代器要求容器必须包含对应的push_back(),push_front(),insert()操作,这样才能对容器进行插入。

插入迭代器分三种

  back_insert_iterator(C) 在容器末端插入数据

  front_insert_iterator(C) 在容器前端插入数据

  insert_iterator(C) 在容器指定位置插入数据

对应三个函数模板

  back_inserter(c):这种迭代器调用容器的push_back操作替代赋值运算符。该迭代器的参数是容器本身。

  front_inserter(c):该迭代器使用push_front操作替代赋值运算符。参数是容器本身。

  Inserter(c,i):该迭代器使用容器的insert操作替代赋值运算符。该迭代器有两个参数:第一个参数是容器本身,第二个参数是容器的一个迭代器,用以指定插入位置。

 

反转迭代器

改变迭代器行为或者将流包装成迭代器. reverse_iterator<>

将容器内数据反向输出。

 1 #include <iostream>
 2 #include <cstring>
 3 #include <iterator>
 4 
 5 
 6 int main()
 7 {
 8     char array[] = "abcde";
 9     using namespace std;
10     typedef reverse_iterator<char*> backward_iterator;//
11     backward_iterator b(array+strlen(array));//指向最后一个元素位置 
12     backward_iterator end(array);//指向首元素位置
13     for (; b !=end;++b)//从最后一个开始逆向循环
14     {
15         cout<<*b;//
16     }
17 
18     getchar();
19 }

 

插入迭代器

将数据插入指定位置

 1 #include <iostream>
 2 #include <list>
 3 #include <iterator>
 4 using namespace std;
 5 
 6 int main()
 7 {
 8     int array[] = {0,1,2,3,4,5,6,7,8,9};
 9     list<int>il;
10     list<int>::iterator it1;
11     copy(array+5,array+10,back_inserter(il));//插入il末尾 5 6 7 8 9
12     it1 = il.begin();
13     for(;it1!= il.end();++it1)//输出为56789
14     {
15         cout<<*it1;
16     }
17     cout<<endl;
18 
19     typedef reverse_iterator<int*>array_reverse_iterator;//反转迭代器
20     copy(array_reverse_iterator(array+5),array_reverse_iterator(array),front_inserter(il));//插入顺序4,3,2,1,0
21 
22     list<int>::iterator it2 = il.begin();
23     for(;it2!= il.end();++it2)//输出为0123456789
24     {
25         cout<<*it2;
26     }
27     cout<<"inserter"<<endl;
28     int a[] = {0,1};
29     copy(a,a+2,inserter(il,it2));//指定位置插入数据
30 
31     it2 = il.begin();
32     for(;it2!= il.end();++it2)//输出为012345678901
33     {
34         cout<<*it2;
35     }
36     getchar();
37 }

 

总结:

  反转迭代器-使迭代器行为和原来相反,++变--,+n变 –n,等。

  插入迭代器- 在指定位置插入数据,容器头部或者尾部,或者任意位置,但必须保证容器含有对应的功能。

 

posted @ 2014-11-18 18:43  struggle_time  阅读(1024)  评论(0编辑  收藏  举报