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

时间:2023-02-19 21:07:46

反向迭代器

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

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

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

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

//插入,结果一样
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进阶--狡猾的反向迭代器的更多相关文章

  1. STL &colon; 反向迭代器&lpar;Reverse Iterator&rpar;

    1. 定义反向迭代器(Reverse Iterator)是一种反向遍历容器的迭代器.也就是,从最后一个元素到第一个元素遍历容器.反向迭代器将自增(和自减)的含义反过来了:对于反向迭代器,++运算将访问 ...

  2. 洛谷3320 SDOI2015寻宝游戏(set&plus;dfs序)(反向迭代器的注意事项!)

    被\(STL\)坑害了一个晚上,真的菜的没救了啊. 准确的说是一个叫\(reverse\ iterator\)的东西,就是我们经常用的\(rbegin()\) 有一个非常重要的性质 在反向迭代器中,+ ...

  3. C&plus;&plus;迭代器之&&num;39&semi;反向迭代器&&num;39&semi;

    反向迭代器(Reverse Iterator)是普通迭代器的适配器,通过重新定义自增和自减操作,以达到按反序遍历元素的目的.如果在标准算法库中用反向迭代器来代替普通的迭代器,那么运行结果与正常情况下相 ...

  4. 【C&plus;&plus;】反向迭代器(rbegin&comma;rend)(转载)

    转自:http://blog.csdn.net/kjing/article/details/6936325 rbegin和rend,很有用! C++ primer (中文版第四版)第273页 9.3. ...

  5. 10&period;4&period;3反向迭代器Reverse&lowbar;iterator笔记

    反向迭代器就是在容器中从尾元素向首元素反向移动的迭代器.对于反向携带器,递增(以及递减)操作的含义会颠倒过来.递增一个反向迭代器(++it)会移动到前一个元素:递减一个迭代器(--it)会移动到下一个 ...

  6. STL迭代器之二:迭代器型别

    如果一个迭代器要兼容stl,必须遵循约定,自行以内嵌型别定义的方式定义出相应型别.根据书中介绍,最常用到的迭代器型别有五种:value type,difference type, pointer, r ...

  7. 【算法系列学习三】&lbrack;kuangbin带你飞&rsqb;专题二 搜索进阶 之 A-Eight 反向bfs打表和康拓展开

    [kuangbin带你飞]专题二 搜索进阶 之 A-Eight 这是一道经典的八数码问题.首先,简单介绍一下八数码问题: 八数码问题也称为九宫问题.在3×3的棋盘,摆有八个棋子,每个棋子上标有1至8的 ...

  8. stl中的容器、迭代器和算法----vector中的find实现

    来源 http://blog.csdn.net/huangyimin/article/details/6133650 stl包括容器.迭代器和算法: 容器 用于管理一些相关的数据类型.每种容器都有它的 ...

  9. Python进阶:设计模式之迭代器模式

    在软件开发领域中,人们经常会用到这一个概念——“设计模式”(design pattern),它是一种针对软件设计的共性问题而提出的解决方案.在一本圣经级的书籍<设计模式:可复用面向对象软件的基础 ...

随机推荐

  1. &lpar;Tree&rpar;94&period;Binary Tree Inorder Traversal

    /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * Tre ...

  2. 冒泡排序-java

    排序-冒泡排序 基本思想:从一端开始,逐个比较相邻的两个元素,发现倒序即交换. 这里按从后往前(从下往上)逐个比较相邻元素. 平均时间:O(n2) 最好情况:O(n) 最坏情况:O(n2)(逆序) 辅 ...

  3. Using Flash Builder with Flash Professional

    http://help.adobe.com/en_US/flashbuilder/using/WSc5cd04c102ae3e97-6e5d439512e1414e588-8000.html

  4. 深入解析PHP 5&period;3&period;x 的strtotime&lpar;&rpar; 时区设定 警告信息修复

    在某些参考资料中是说这两个方法任选其一就可,但经我测试,必须两个方法同时使用,才不会再出现错误提示 PHP Warning: strtotime(): It is not safe to rely o ...

  5. JAVA的网络编程【转】

    JAVA的网络编程[转] Posted on 2009-12-03 18:04 火之光 阅读(93441) 评论(20) 编辑 收藏 网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能, ...

  6. PHP-xml-1

    SimpleXML 解析xml 假设xml没有声明encoding默认使用utf-8进行解码.终于得到的数据编码为utf-8格式. 我猜想它内部实现了iconv(encoding='utf-8', ' ...

  7. Linux05--Shell程序设计01

    1.Shell脚本介绍 基本介绍: shell脚本是一个可执行的纯文本文件,由多个shell命令组成. 命令的执行是从上而下,从左而右的分析和执行 命令,参数间的多个空白也会被忽略 #是注释 #!用于 ...

  8. 登陆整合实现-QQ互联认证(ASP&period;NET版本)

    原文:登陆整合实现-QQ互联认证(ASP.NET版本) 首先 我们创建一个qq.ashx的页面,这个页面会跳转到QQ的请求界面 代码如下: QQSettingConfig qqSettingConfi ...

  9. HttpClient以json形式的参数调用http接口并对返回的json数据进行处理(可以带文件)

    1.参数的url就是被调用的地址,map是你要传的参数.参数转成json我使用的是gson方式转换的. 主要使用的jar包有httpclient-4.5.3.jar.httpcore-4.4.6.ja ...

  10. redis之禁用保护模式以及修改监听IP

    今天在安装filebeat的时候,出现了关于redis报错的问题,所以来总结一下: 报错信息是: (error) DENIED Redis is running in protected mode b ...