反转迭代器和插入迭代器的区别
反转迭代器顾名思义,反向操作容器,而插入迭代器是将迭代器的赋值操作转换为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,等。
插入迭代器- 在指定位置插入数据,容器头部或者尾部,或者任意位置,但必须保证容器含有对应的功能。
本文来自博客园,作者:struggle_time,转载请注明原文链接:https://www.cnblogs.com/songliquan/p/4106509.html