首页 > STL编程 > STL逆向迭代器——reverse iterator

STL逆向迭代器——reverse iterator

Reverse iterators are adapters that redefine increment and decrement operators so that they behave in reverse. Thus, if you use these iterators instead of ordinary iterators, algorithms process elements in reverse order. All standard container classes provide the ability to use reverse iterators to iterate over their elements.

The rbegin() and rend() member functions return a reverse iterator. According to begin() and end(), these iterators define the elements to process as a half-open range. However, they operate in a reverse direction:

  • rbegin() returns the position of the first element of a reverse iteration. Thus, it returns the position of the last element.
  • rend() returns the position after the last element of a reverse iteration. Thus, it returns the position before the first element.

简单的说,容器的rbegin(), rend()都传回逆向迭代器,他们定义的也是一个半开的区间,rbegin()指向容器的最后一个元素,而rend()则指向容器的第一个元素的前一个位置。下面看一个简单的例子,通过该例子来熟悉逆向迭代器的性质:

#include <iostream>
#include <algorithm>
#include <iterator>
#include <vector>
using namespace std;

int main()
{
	vector<int> coll;
	
	for(int i = 1; i <= 9; ++i)
	{
		coll.push_back(i);
	}
	
	vector<int>::iterator pos;
	pos = find(coll.begin(), coll.end(), 5);
	cout << "pos: " << *pos << endl;
	
	vector<int>::reverse_iterator rpos(pos);
	cout << "rpos: " << *rpos << endl;

	return 0;
}

 程序运行之后的输出结果是:

  • pos: 5
  • rpos: 4

第一个find操作就是在容器中查找元素值为5的元素,显然能够找到,输出时就是5.而将pos转换成逆向迭代器reverse iterator之后,输出竟然成了4了。

下面通过一张图片来描述逆向迭代器的工作原理:

姑且这么认为吧(事实上对于指向我都搞糊涂了)。


觉得文章还不错?点击此处对作者进行打赏!


本文地址: 程序人生 >> STL逆向迭代器——reverse iterator
作者:代码疯子(Wins0n) 本站内容如无声明均属原创,转载请保留作者信息与原文链接,谢谢!


更多



  1. 2010年9月23日01:03 | #1

    你的回复栏很不错

    [回复]

    admin 回复:

    你说的是编辑器把,那是FCKEditor

    [回复]

  2. 无奈的摇头
    2013年12月20日15:03 | #2

    什么叫姑且这么认为吧
    我晕。如果你姑且认为,大不必写出来!

    [回复]

    代码疯子 回复:

    @无奈的摇头, 早几年写的文章了。姑且就不能写了吗?我写博客又不收读者的钱,我写博客也不强求别人看,不这么认为,大可以不看。

    [回复]

    无奈的摇头 回复:

    @代码疯子, 你竟然写了,肯定是想帮助后来人的。那为什么不把问题解决完全呢。 帮助向我们这样的晚辈呢。 [em020]

    [回复]

    代码疯子 回复:

    @无奈的摇头, 我承认网上垃圾文章太多了,当别人通过搜索引擎找到这里的时候发现没有用是件很烦恼的事情。
    这是当时候学习《The C++ Standard Library》的笔记,你有兴趣可以自己去看书,这本书出了新版本,可以找到英文版的电子版。

    [回复]

    无奈的摇头 回复:

    @代码疯子, 首先对于你的理解,表示由衷的感谢。 也很感谢你们的分享精神。我们这一代人正是基于前一辈的分享,所以才会越走越快。晚辈现在就在看《The C++ Standard Library》。但我看的是中文版。
    如果要我看英文版,我总感觉速度太慢了。 不如中文版来的速度快,而且有不明白的地方。再针对性的解决。这样感觉快一点。

    [回复]

  3. 无奈的摇头
    2013年12月20日15:21 | #3

    现在明白了,逆向迭代器的出现主要是为了考虑到STL的容器是半开区间,逆向迭代器指向逻辑位置的下一个元素。就像示例中的5这个元素,如果是正向迭代器的话,逻辑位置与实际位置都是5 , 迭代器的位置也是5;
    如果用逆向迭代器的话,迭代器位置是4.(这里也许是问题的所在)。 因为逆迭代器指向下一个嘛,所以当然是4就够啊。不明白的欢迎交流。 [em012]

    [回复]

  1. 2010年9月25日13:13 | #1
  2. 2010年9月25日13:43 | #2