码迷,mamicode.com
首页 > 其他好文 > 详细

STL进阶--狡猾的反向迭代器

时间:2019-01-01 11:08:17      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:两种   ras   不同   reverse   iterator   class   方法   产生   nts   

反向迭代器

两种声明反向迭代器的方法

reverse_iterator<vector<int>::iterator> ritr;
vector<int>::reverse_iterator ritr;

用反向迭代器遍历

vector<int> vec = {4,5,6,7};
reverse_iterator<vector<int>::iterator> ritr;
for (ritr = vec.rbegin(); ritr != vec.rend(); ritr++)
   cout << *ritr << endl;   // prints: 7 6 5 4

迭代器<-->反向迭代器转换

vector<int>::iterator itr;
vector<int>::reverse_iterator ritr;

ritr = vector<int>::reverse_iterator(itr);    //迭代器-->反向迭代器

itr = vector<int>::iterator(ritr);  // 编译错误
itr = ritr.base();      //返回什么?

// C++标准说: base()返回当前的迭代器

例子

vector<int> vec = {1,2,3,4,5};
vector<int>::reverse_iterator ritr = find(vec.rbegin(), vec.rend(), 3);


cout << (*ritr) << endl;   // 3

vector<int>::iterator itr = ritr.base();  

cout << (*itr) << endl;   // 4 

技术分享图片

使用正向迭代器和反向迭代器可能产生不同的结果

//插入,结果一样
vec = {1,2,3,4,5};
ritr = find(vec.rbegin(), vec.rend(), 3);

//Inserting
vec.insert(ritr, 9);         // vec: {1,2,3,9,4,5}
// or
vec.insert(ritr.base(), 9);  // vec: {1,2,3,9,4,5}


vec = {1,2,3,4,5};
ritr = find(vec.rbegin(), vec.rend(), 3);

// 删除,结果不同
vec.erase(ritr);    // vec: {1,2,4,5}  
// or
vec.erase(ritr.base());    // vec: {1,2,3,5}  

STL进阶--狡猾的反向迭代器

标签:两种   ras   不同   reverse   iterator   class   方法   产生   nts   

原文地址:https://www.cnblogs.com/logchen/p/10204065.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!