对于逆向迭代器,很重要的一点是需要弄清楚逻辑位置和实际位置二者的区别。

下图显示了逆向迭代器的位置和所指的数值:

可以发现,逆向迭代器所指位置(实际位置)和所代表的的数值(逻辑位置或数值)是不同的。C++这么做是有其原因的。导致这个行为的原因是区间的半开性。为了能够制定容器内的所有元素,我们必须运用最后一个元素的下一个位置。但是对于reverse迭代器而言,这个位置位于第一个元素之前。这时候问题就出现了,这个位置也许并不存在,因为容器并不要求其第一个元素之前的位置合法。
因此,逆向迭代器运用了一个小技巧:实际上倒置了“半开原则”,即逆向迭代器所定义的区间不包括起点,而包括终点。但是逻辑上一如常态。这样就导致了逆向迭代器实际所指的元素位置和逻辑上所指的元素位置就不一致。

下面再看看将一个迭代器转化为逆向迭代器的过程:

可以发现,迭代器的实际位置(元素)不变,但是逻辑位置(元素)发生了变化。图中pos迭代器转化为逆向迭代器rpos后实际位置还是5,但是逻辑位置是4.即逻辑元素位置是实际位置的前一个位置。测试代码:

   #include <iostream> #include <vector> #include <algorithm> using namespace std; int main()  { vector<int> coll; //insert elements from 1 to 9 for (int i=1; i<=9; ++i) { coll.push_back(i); } //find position of element with value 5 vector<int>::iterator pos; pos = find (coll.begin(), coll.end(), 5); //print value to which iterator pos refers cout << "pos: " << *pos << endl; //convert iterator to reverse iterator rpos vector<int>::reverse_iterator rpos(pos); //print value to which reverse iterator rpos refers cout << "rpos: " << *rpos <<endl; } 

输出结果是(VS2008):

【C++ STL学习之八】逆向迭代器reverse_iterator相关推荐

  1. STL学习_配接器篇

    STL学习_配接器篇 定义 配接器(Adapter)在STL组件的灵活组合运用功能上,扮演着轴承.转换器的角色.它事实上是一种设计模式.即将一个class的接口转换为另一个class的接口,使原本因接 ...

  2. C++ STL学习笔记

    C++ STL学习笔记一 为何要学习STL: 数据结构与算法是编程的核心,STL中包含各种数据结构和优秀的算法,确实值得深入学习,本文中虽然着重使用,但希望有心的朋友能多看看相关数据结构的实现,对于C ...

  3. STL学习——RB-tree篇

    STL学习--RB-tree篇 简介 RB-tree(红黑树)是一棵平衡二叉搜索树,它需要满足以下规则: 1)每个节点不是红色就是黑色: 2)根节点为黑色: 3)如果节点为红,其子节点必须为黑: 4) ...

  4. 【STL学习指南】STL的入门学习指南

    目录 STL 学习指南 一. STL基础 二. C++ STL 容器 1 序列式容器 1.1 array 1.2 vector 1.3 deque 1.4 list 2 关联式容器 2.1 map 2 ...

  5. 【C++ STL学习笔记】C++ STL序列式容器(array,vector,deque,list)

    文章目录 C++ STL容器是什么? 迭代器是什么,C++ STL迭代器(iterator)用法详解 迭代器类别 迭代器的定义方式 C++序列式容器(STL序列式容器)是什么 容器中常见的函数成员 C ...

  6. STL学习笔记(一)

    2019独角兽企业重金招聘Python工程师标准>>> 1. 容器(Containers) 容器分为两类: 序列式容器(Sequence containers),此乃可序群集,其中每 ...

  7. C++STL学习笔记(4) 分配器(Allocator)

    在前面的博客<C++ STL学习笔记(3) 分配器Allocator,OOP, GP简单介绍>中,简单的介绍了分配器再STL的容器中所担当的角色,这一节对STL六大部件之一的分配器进行详细 ...

  8. C++ STL学习笔记(3) 分配器Allocator,OOP, GP简单介绍

    继续学习侯捷老师的课程! 在前面的博客<C++ STL学习笔记(2) 容器结构与分类>中介绍了STL中常用到的容器以及他们的使用方法,在我们使用容器的时候,背后需要一个东西支持对内存的使用 ...

  9. 标准模板库(STL)学习探究之Multimap容器

    C++ Multimaps和maps很相似,但是MultiMaps允许重复的元素.(具体用法请参考map容器) 函数列表: begin() 返回指向第一个元素的迭代器 clear() 删除所有元素 c ...

最新文章

  1. Google AI 研发医疗新模型,预测死亡率比医院高出10%
  2. C#时间(DateTime)格式化
  3. 求多项式解(三种方法MATLAB)
  4. DML触发器实现日志功能
  5. java获取随机正整数
  6. JQUERY拼接数组
  7. 编译原理实验报告_任意给定一个正规式 r (包括连接、或、闭包运算),根据 Thompson算法设计一个程序,生成与该正规式等价的 NFA N 。
  8. html怎么添加5px高的线,CSS 0.5px 细线边框的原理和实现方式
  9. php实现播放直播_PHP直播技术分享(一:实现直播)
  10. B端SaaS产品工作流程
  11. 让LYNC 2010 登录OCS 2007 R2
  12. Cocos2D-X2.2.3学习笔记9(处理重力感应事件,移植到Android加入两次返回退出游戏效果)...
  13. 搭建邮件服务器2003,用Windows Server 2003来搭建简易的邮件服务器
  14. 制作整人计算机病毒,自己制作简单病毒---三行命令的整人BAT,弹出很多窗口,一直弹到内存耗...
  15. [NOIP2016 普及组] 魔法阵
  16. 软考软件设计师下午题目java设计模式(自用)
  17. python colorsys模块 RGB和其他色彩系统(颜色空间)(YIQ、HLS、HSV)之间的转换 hsv_to_rgb(h, s, v)函数
  18. (一)PBR材质理论
  19. 夏雨老师:告诉你常见颜色对人心理上的影响
  20. c语言中 “=”和”==“的区别

热门文章

  1. 训练(training)和推理\推断(inference)的关系?
  2. case class和trait
  3. extjs4.2 前端读取对象的方法
  4. ubuntu安装python3.6_Ubuntu16.04安装python3.6.5步骤详解
  5. 机器人多用途综合官网展示PHP单页源码
  6. 百度SEO Typecho仿Win95怀旧主题
  7. laravel 如何 new php 类,PHP实例:laravel通过创建自定义artisan make命令来新建类文件详解...
  8. 小程序 | 微信小程序多图上传(点击上传、可修改删除与放大回显)
  9. 实用常识 | 一篇文章记录如何轻松清理C盘,C盘又满了,继续盘它
  10. 浏览器复制网页链接到微信,显示却只有网页title解决