zoukankan      html  css  js  c++  java
  • STL : 反向迭代器(Reverse Iterator)

    1. 定义
    反向迭代器(Reverse Iterator)是一种反向遍历容器的迭代器。也就是,从最后一个元素到第一个元素遍历容器。反向迭代器将自增(和自减)的含义反过来了:对于反向迭代器,++运算将访问前一个元素,而--运算则访问下一个元素。
    2. 作用
    (1)反向迭代器需要使用自减操作符:标准容器上的迭代器(reverse_iterator)既支持自增运算,也支持自减运算。但是,流迭代器由于不能反向遍历流,因此流迭代器不能创建反向迭代器。
    (2)可以通过reverse_iterator::base()将反向迭代器转换为普通迭代器使用,从逆序得到普通次序。这是因为:有些容器的成员函数只接受iterator类型的参数,所以如果你想要在ri所指的位置插入一个新元素,你不能直接这么做,因为vector的insert函数不接受reverse_iterator。如果你想要删除ri 所指位置上的元素也会有同样的问题。erase成员函数会拒绝reverse_iterator,坚持要求iterator。为了完成删除和一些形式的插入操作,你必须先通过base函数将reverse_iterator转换成iterator,然后用iterator来完成工作。

    3. 例子

     1 void test_reverse()  
     2 {  
     3     int a[] = {-2, -1, 0, 1, 2, 3, 4};  
     4     std::list<int> lst(a, a + sizeof(a)/sizeof(int));  
     5     std::copy(lst.begin(), lst.end(), std::ostream_iterator<int>(std::cout, " "));  
     6     std::cout << std::endl;  
     7   
     8     std::list<int>::reverse_iterator rit = lst.rbegin();  
     9     while(rit != lst.rend())  
    10         std::cout << *rit++ << " ";  
    11     std::cout << std::endl;  
    12   
    13     // 使用base()实现insert或erase等操作。  
    14     std::vector<int> vect(a, a + sizeof(a)/sizeof(int));  
    15     // 反向迭代器指向2  
    16     std::vector<int>::reverse_iterator vrit = std::find(vect.rbegin(), vect.rend(), 2);  
    17     // 注意:正向迭代器是指向3  
    18     std::vector<int>::iterator it(vrit.base());  
    19     inserter(vect, it) = 10;  
    20     std::copy(vect.begin(), vect.end(), std::ostream_iterator<int>(std::cout, " "));  
    21     std::cout << std::endl;  
    22 }  

    输出结果:

    -2 -1 0 1 2 3 4  
    4 3 2 1 0 -1 -2  
    -2 -1 0 1 2 10 3 4  
    请按任意键继续. . .  

    来源:http://blog.csdn.net/huang_xw/article/details/8205784

  • 相关阅读:
    关于学习Knockoutjs--入门(一)
    h5移动端前端性能优化
    VS2015常用快捷键总结
    51nod1196 字符串的数量
    51nod1189 阶乘分数
    51nod1161 Partial Sums
    51nod1040 矩阵相乘结果的判断
    51nod 1125 交换机器的最小代价
    51nod 1120 机器人走方格 V3
    51nod 1040 最大公约数之和
  • 原文地址:https://www.cnblogs.com/ll-10/p/5461383.html
Copyright © 2011-2022 走看看