首页 > 代码库 > 反转迭代器和插入迭代器的区别
反转迭代器和插入迭代器的区别
反转迭代器顾名思义,反向操作容器,而插入迭代器是将迭代器的赋值操作转换为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,等。
插入迭代器- 在指定位置插入数据,容器头部或者尾部,或者任意位置,但必须保证容器含有对应的功能。
反转迭代器和插入迭代器的区别
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。