首页 > 代码库 > 反转迭代器和插入迭代器的区别

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

反转迭代器顾名思义,反向操作容器,而插入迭代器是将迭代器的赋值操作转换为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 912     it1 = il.begin();13     for(;it1!= il.end();++it1)//输出为5678914     {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,021 22     list<int>::iterator it2 = il.begin();23     for(;it2!= il.end();++it2)//输出为012345678924     {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)//输出为01234567890133     {34         cout<<*it2;35     }36     getchar();37 }

 

总结:

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

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

 

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