• 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
  • 相关阅读:
    第九章 jQuery验证插件简介
    第八章 jQuery与Ajax应用
    第七章 jQuery操作表格及其它应用
    [wpf笔记] 1.xaml
    [2014-10-11]wpf数据绑定
    [2014-9-15]异步委托线程高级
    [2014-9-13]委托多线程
    [2014-9-12]多线程
    [2014-9-11]异步编程继续
    [2014-9-10]异步编程
  • 原文地址:https://www.cnblogs.com/DLzhang/p/3992539.html
Copyright © 2020-2023  润新知