zoukankan      html  css  js  c++  java
  • STL iterator和reverse_iterator

    先看一段代码:

     1 #include <iostream>
     2 #include <deque>
     3 #include <algorithm>
     4 #include <iterator>
     5 using namespace std;
     6 
     7 void print(int elem)
     8 {
     9     cout << elem << ' ';
    10 }
    11 
    12 int main()
    13 {
    14     deque<int> coll;
    15     
    16     for(int i = 1; i <= 9; ++i)
    17     {
    18         coll.push_back(i);
    19     }
    20     
    21     deque<int>::iterator pos1;
    22     pos1 = find(coll.begin(), coll.end(), 2);
    23 
    24     deque<int>::iterator pos2;
    25     pos2 = find(coll.begin(), coll.end(), 7);
    26     
    27     for_each(pos1, pos2, print);
    28     cout << endl;
    29     
    30     deque<int>::reverse_iterator rpos1(pos1);
    31     deque<int>::reverse_iterator rpos2(pos2);
    32     
    33     for_each(rpos2, rpos1, print);
    34     cout << endl;
    35 
    36     return 0;
    37 }

    代码首先在一个deque中插入1到9,然后查找元素值为2和7的位置,分别赋值给迭代器pos1和pos2,然后输出,由于STL中的操作总是左开右闭的区间,即[2,7),所以输出2 3 4 5 6,7不会输出。

    接下来将迭代器转换成逆向迭代器,再次输出,对于反向迭代器,由于是反向,所以按逻辑来说它是左开右闭的(这里我尝试了rpos2为iterator.end(),rpos1为iterator.begin(),此时输出全部),即(7,2](事实上还是左闭右开,只不过此时的左和iterator顺序一样)。所以输出6 5 4 3 2,下面的图片解释的很清楚。

    转载请注明出处:http://www.cnblogs.com/fnlingnzb-learner/p/6097947.html

  • 相关阅读:
    1.8 Hello World添加menu
    1.7 HelloWorld 添加视图
    1.6 Hello World
    1.5 组件开发基础
    awk
    sed
    grep / egrep
    Shell基础知识
    和管道符有关的命令
    Shell变量
  • 原文地址:https://www.cnblogs.com/fnlingnzb-learner/p/6097947.html
Copyright © 2011-2022 走看看