反向迭代器适配器(reverse_iterator),可简称为反向迭代器或逆向迭代器,常用来对容器进行反向遍历,即从容器中存储的最后一个元素开始,一直遍历到第一个元素。
反向迭代器底层可以选用双向迭代器或者随机访问迭代器作为其基础迭代器。不仅如此,通过对 ++(递增)和 --(递减)运算符进行重载,使得:
#include <iterator> using namespace std;
说明
实现反向迭代器的模板类定义在
<iterator>
头文件,并位于 std 命名空间中。STL反向迭代器适配器模板
语法
template <class Iterator> class reverse_iterator;
说明
Iterator 模板参数指的是模板类中所用的基础迭代器的类型,只能选择双向迭代器或者随机访问迭代器。这意味着,如果想使用反向迭代器实现逆序遍历容器,则该容器的迭代器类型必须是双向迭代器或者随机访问迭代器。
STL反向迭代器运算符重载
运算符重载列表
重载运算符 功能 operator* 以引用的形式返回当前迭代器指向的元素。 operator+ 返回一个反向迭代器,其指向距离当前指向的元素之后 n 个位置的元素。此操作要求基础迭代器为随机访问迭代器。 operator++ 重载前置 ++ 和后置 ++ 运算符。 operator+= 当前反向迭代器前进 n 个位置,此操作要求基础迭代器为随机访问迭代器。 operator- 返回一个反向迭代器,其指向距离当前指向的元素之前 n 个位置的元素。此操作要求基础迭代器为随机访问迭代器。 operator– 重载前置 – 和后置 – 运算符。 operator-= 当前反向迭代器后退 n 个位置,此操作要求基础迭代器为随机访问迭代器。 operator-> 返回一个指针,其指向当前迭代器指向的元素。 operator[n] 访问和当前反向迭代器相距 n 个位置处的元素。 说明
前面在学习每一种容器时,都提供有大量的成员函数。但迭代器模板类不同,其内部更多的是对运算符的重载。
案例
创建并使用反向迭代器适配器
创建并使用反向迭代器适配器
#include <iostream> #include <iterator> #include <vector> using namespace std; int main() { cout << "嗨客网(www.haicoder.net)\n" << endl; vector<int> myvector{ 1,2,3,4,5,6,7,8 }; reverse_iterator<vector<int>::iterator> my_reiter(myvector.rbegin()); cout << *my_reiter << endl; cout << *(my_reiter + 3) << endl; cout << *(++my_reiter) << endl; cout << my_reiter[4] << endl; return 0; }
我们在 Linux 下使用 g++ 进行编译,具体命令如下: