1,反向迭代器的概念
向后遍历序列的迭代器。这些迭代器颠倒了++和--的含义。
类型为: std::reverse_iterator
头文件:
#include <iterator>
容器操作也会提供反向迭代器rend和rbegin,其与end和begin的关系如下图所示:

rbegin指向最后一个元素;rend指向第一个元素前面的位置。
2,反向迭代器的成员函数
(constructor) 构造一个新的迭代器适配器
operator= 赋值
base accesses the underlying iterator 转换为正常迭代器,注意转换后指向的是下一位置的元素
operator* 解引用,获取指向的值
operator->
operator[] 通过下标获取元素
++, ++(int) advances or decrements the iterator
+=, +,
--, --(int),
-=, -
存疑:++与 ++(int) 有什么区别?
请注意base的位置发生了后移。
3,反向迭代器的用法
将反向迭代器赋值给find()函数,就变成了从后向前查找。
注意,当给find输入反向迭代器后,find返回的也是反向迭代器。
且不能直接将反向迭代器赋值给普通的迭代器。
如下示例为查找序列中最后一个为0的元素:
list<int> ilst = {520, 3132, 0, 3, 5, 9, 0, 8, 7};
list<int> ::reverse_iterator r_iter = find(ilst.rbegin(), ilst.rend(), 0);
for (list<int> ::iterator iter = --r_iter.base(); iter != ilst.end(); iter++)
{
cout << *iter << endl;
}
输出的是最后一个0到序列末尾的所有元素。请注意base的位置发生了后移。