C++学习之路: STL探索之 reverse_iterator 的一个小陷阱

1 2.reverse迭代器
2 a)    在逻辑上,rbegin指向最后一个元素,rend指向第一个元素的前一个位置。
3 b)    但是在实际实现上,rbegin指向最后一个元素的下一个位置,rend指向第一个元素。
4 c)    reverse迭代器的物理位置与逻辑位置差1
5 d)    逻辑值比物理位置减少了1.

引言:

vector<int> vec 我们push_back是十个数

          it

0  1  2  3  4  5  6  7  8  9

r_it

我们用 vector<int>:: iterator it = vec.find(begin(), end(), 5) //it现在指向 5所在pos

我们再定义一个逆向的迭代器

vector<int>:: reverse_iterator r_it(it) ; //用it初始化逆向 迭代器。

如果我们打印一下 r_it 结果却是4 。

 1 #include <iostream>
 2 #include <string>
 3 #include <vector>
 4
 5 using namespace std;
 6
 7 int main(int argc, const char *argv[])
 8 {
 9     vector<int> vec;
10
11     for (int i = 0; i <= 9; i++) {
12         vec.push_back(i) ;
13     }
14
15     vector<int>::iterator it = vec.begin() ;
16     while( *it != 5)
17     {
18         it++ ;
19     }
20     cout << *it << endl;
21
22     vector<int>::reverse_iterator r_it(it) ;
23
24     cout << *r_it << endl;
25     return 0;
26 }
27
28 结果:
29
30 ?  homework  ./a.out
31 5
32 4
时间: 2024-11-04 18:21:34

C++学习之路: STL探索之 reverse_iterator 的一个小陷阱的相关文章

STM32学习之路-感觉自己走到了一个天大的坑里了!

先前兴致勃勃的来弄16位并口驱动LCD.本以为就须要改下LCD IC的初始化即可了,没想到弄了这么多天最终发现自己走进了一个深坑了 T T 原因是我的开发板是奋斗V5的, 它确实有MCU外扩IO口, 还支持16位并口驱动,可是!! 感觉它全然是为了迎合FSMC-LCD来设定TFT接口的.. 这是它的原理图.. 再来看看正点原子的 再来看看它的芯片中关于这些IO口的部分 正点原子这个应该是不支持FSMC的.这个就非常easy写数据: #define LCD_CS_SET <span style=&qu

QT学习之路--创建一个对话框

Q_OBJECT:这是一个宏,凡是定义信号槽的类都必须声明这个宏. 函数tr()全名是QObject::tr(),被他处理过的字符串可以使用工具提取出来翻译成其他语言,也就是做国际化使用. 对于QT学习之路:Qt学习之路(7):创建一个对话框(上)这个程序.编译出现 invalid use of incomplete type ‘class QPushButton’ findButton->setEnabled(!text.isEmpty()); ^ In file included from

Git学习之路(6)- 分支操作

▓▓▓▓▓▓ 大致介绍 几乎所有的版本控制系统都会支持分支操作,分支可以让你在不影响开发主线的情况下,随心所欲的实现你的想法,但是在大多数的版本控制系统中,这个过程的效率是非常低的.就比如我在没有学习Git之前,想实现我的一个小想法,但是又害怕影响已完成的工作,只有ctrl+c.ctrl+v,但是在Git中,甚是方便了许多. 这篇博客主要讲以下几部分: ◆ 创建分支 ◆ 合并分支 ◆ 删除分支 ▓▓▓▓▓▓ 创建分支 在之前的学习中,都只有一个分支即 master分支 这是Git中主分支的默认名

我的STL学习之路

说起STL(标准模板库),相信了解C++的都不会陌生吧^_^.LZ是从大三开始学习C++(ps:不是科班出身),并慢慢接触使用STL的,在学校中使用STL比较多的情况是写数据结构代码,使用STL实现数据结构代码(我的数据结构源码),使我们专注于考虑算法思想,不拘泥于底层代码实现. 这里LZ不讲STL的具体知识,只讨论关于STL的学习和使用问题!结合LZ的学习过程,LZ觉得C++的学习(当然,这其中包括的STL)大致路线如下: 学习C++基本语法 掌握类.继承.多态等概念 理解面对对象和泛型编程思

[C++基础]029_C++学习之路

[C++基础]029_C++学习之路 看了一个多星期的C++,找了很多博客来计划铺垫未来C++学习之路,发现C++的水不是一般的深,虽然没有J2EE里面的各种框架,但是其本身已极尽复杂.个人才踩到了一点水皮,下面是摘录的一些博客上的内容,有需要学C++的,一起学习: C++高手需知知识(其中一部分,但有代表性) 虚函数是什么函数?为什么需要虚函数?普通基类和虚基类的区别是什么?虚继承的作用是什么? 什么是虚函数表?在多重继承关系下,虚函数表是如何存储虚函数关系的?如何通过虚函数表分析设计安全性?

我的算法学习之路

关于 严格来说,本文题目应该是我的数据结构和算法学习之路,但这个写法实在太绕口--况且CS中的算法往往暗指数据结构和算法(例如算法导论指的实际上是数据结构和算法导论),所以我认为本文题目是合理的. 这篇文章讲了什么? 我这些年学习数据结构和算法的总结. 一些不错的算法书籍和教程. 算法的重要性. 初学 第一次接触数据结构是在大二下学期的数据结构课程.然而这门课程并没有让我入门--当时自己正忙于倒卖各种MP3和耳机,对于这些课程根本就不屑一顾--反正最后考试划个重点也能过,于是这门整个计算机专业本

Qt学习之路

  Qt学习之路_14(简易音乐播放器) Qt学习之路_13(简易俄罗斯方块) Qt学习之路_12(简易数据管理系统) Qt学习之路_11(简易多文档编辑器) Qt学习之路_10(Qt中statusBar,MessageBox和Timer的简单处理) Qt学习之路_9(Qt中Item Widget初步探索) Qt学习之路_8(Qt中与文件目录相关操作) Qt学习之路_7(线性布局和网格布局初步探索) Qt学习之路_6(Qt局域网聊天软件) Qt学习之路_5(Qt TCP的初步使用) Qt学习之路

Peng Gong:我的算法学习之路

原文出处: Lucida (@peng_gong) 关于 严格来说,本文题目应该是我的数据结构和算法学习之路,但这个写法实在太绕口--况且CS中的算法往往暗指数据结构和算法(例如算法导论指的实际上是数据结构和算法导论),所以我认为本文题目是合理的. 这篇文章讲了什么? 我这些年学习数据结构和算法的总结. 一些不错的算法书籍和教程. 算法的重要性. 初学 第一次接触数据结构是在大二下学期的数据结构课程.然而这门课程并没有让我入门--当时自己正忙于倒卖各种MP3和耳机,对于这些课程根本就不屑一顾--

转----我的算法学习之路

我的算法学习之路 关于 严格来说,本文题目应该是我的数据结构和算法学习之路,但这个写法实在太绕口——况且CS中的算法往往暗指数据结构和算法(例如算法导论指的实际上是数据结构和算法导论),所以我认为本文题目是合理的. 原文链接:http://zh.lucida.me/blog/on-learning-algorithms/ 原文作者:Lucida 这篇文章讲了什么? 我这些年学习数据结构和算法的总结. 一些不错的算法书籍和教程. 算法的重要性. 初学 第一次接触数据结构是在大二下学期的数据结构课程