反向迭代器适配器(reverse_iterator),可简称为反向迭代器或逆向迭代器,常用来对容器进行反向遍历,即从容器中存储的最后一个元素开始,一直遍历到第一个元素。
值得一提的是,反向迭代器底层可以选用双向迭代器或者随机访问迭代器作为其基础迭代器。不仅如此,通过对 ++(递增)和 --(递减)运算符进行重载,使得:
- 当反向迭代器执行 ++ 运算时,底层的基础迭代器实则在执行 -- 操作,意味着反向迭代器在反向遍历容器;
- 当反向迭代器执行 -- 运算时,底层的基础迭代器实则在执行 ++ 操作,意味着反向迭代器在正向遍历容器。
本文作者原创,转载请附上文章出处与本文链接。
C++ STL reverse_iterator反向迭代器适配器(深入了解,一文学会)目录
1 reverse_iterator模板类成员函数
2 reverse_iterator模板类创建
3 reverse_iterator模板类示例
1 reverse_iterator模板类成员函数
重载运算符 | 功能 |
---|---|
operator* | 以引用的形式返回当前迭代器指向的元素。 |
operator+ | 返回一个反向迭代器,其指向距离当前指向的元素之后 n 个位置的元素。此操作要求基础迭代器为随机访问迭代器。 |
operator++ | 重载前置 ++ 和后置 ++ 运算符。 |
operator+= | 当前反向迭代器前进 n 个位置,此操作要求基础迭代器为随机访问迭代器。 |
operator- | 返回一个反向迭代器,其指向距离当前指向的元素之前 n 个位置的元素。此操作要求基础迭代器为随机访问迭代器。 |
operator-- | 重载前置 -- 和后置 -- 运算符。 |
operator-= | 当前反向迭代器后退 n 个位置,此操作要求基础迭代器为随机访问迭代器。 |
operator-> | 返回一个指针,其指向当前迭代器指向的元素。 |
operator[n] | 访问和当前反向迭代器相距 n 个位置处的元素。 |
2 reverse_iterator模板类创建
-
#include <iterator>
-
using namespace std;
-
reverse_iterator<vector<int>::iterator> my_reiter;
-
//创建并初始化一个 myvector 容器
-
vector<int> myvector{ 1,2,3,4,5 };
-
//创建并初始化 my_reiter 迭代器
-
reverse_iterator<vector<int>::iterator> my_reiter1(myvector.end());
-
//创建并初始化一个 vector 容器
-
vector<int> myvector2{ 1,2,3,4,5 };
-
//调用复制构造函数初始化反向迭代器的 2 种方式
-
reverse_iterator<vector<int>::iterator> my_reiter2(myvector2.rbegin());
-
//reverse_iterator<vector<int>::iterator> my_reiter = myvector.rbegin();
-
cout << *my_reiter2 << endl;// 8
-
cout << "---------------------------------------------" << endl;
-
cout << "---------------------------------------------" << endl;
3 reverse_iterator模板类示例
-
//创建并初始化一个 vector 容器
-
vector<int> myvector{ 1,2,3,4,5,6,7,8 };
-
//创建并初始化一个反向迭代器
-
reverse_iterator<vector<int>::iterator> my_reiter(myvector.rbegin());//指向 8
-
cout << *my_reiter << endl;// 8
-
cout << *(my_reiter + 3) << endl;// 5
-
cout << *(++my_reiter) << endl;// 7
-
cout << my_reiter[4] << endl;// 3
-
cout << "---------------------------------------------" << endl;
-
cout << "---------------------------------------------" << endl;
以下博客部分内容借鉴自:http://c.biancheng.net/stl/。
C++ STL 容器、迭代器、适配器(深入了解,一文学会) https://blog.csdn.net/qq_37529913/article/details/120052137 C++ STL deque容器(深入了解,一文学会) https://blog.csdn.net/qq_37529913/article/details/118676574
C++ STL vector容器(深入了解,一文学会) https://blog.csdn.net/qq_37529913/article/details/118676109
C++ STL list容器(深入了解,一文学会) https://blog.csdn.net/qq_37529913/article/details/118676917
C++ STL forward_list容器(深入了解,一文学会) https://blog.csdn.net/qq_37529913/article/details/118687348
C++ STL array 容器(深入了解,一文学会) https://blog.csdn.net/qq_37529913/article/details/118688364
C++ STL pair 类模板(深入了解,一文学会) https://blog.csdn.net/qq_37529913/article/details/118714852
C++ STL map容器(深入了解,一文学会) https://blog.csdn.net/qq_37529913/article/details/118741670
C++ STL map emplace()和emplace_hint()(深入了解,一文学会) https://blog.csdn.net/qq_37529913/article/details/118771777
C++ STL multimap容器(深入了解,一文学会) https://blog.csdn.net/qq_37529913/article/details/118773021
C++ STL Set容器(深入了解,一文学会) https://blog.csdn.net/qq_37529913/article/details/118918940
C++ STL multiset容器(深入了解,一文学会) https://blog.csdn.net/qq_37529913/article/details/119624779
C++ STL unordered_map容器(深入了解,一文学会) https://blog.csdn.net/qq_37529913/article/details/119689199
C++ STL unordered_set容器(深入了解,一文学会) https://blog.csdn.net/qq_37529913/article/details/119709019
C++ STL unordered_multiset容器(深入了解,一文学会) https://blog.csdn.net/qq_37529913/article/details/119709079
C++ STL stack容器适配器(深入了解,一文学会) https://blog.csdn.net/qq_37529913/article/details/119723782
C++ STL queue容器适配器(深入了解,一文学会) https://blog.csdn.net/qq_37529913/article/details/119746246
C++ STL priority_queue容器适配器(深入了解,一文学会) https://blog.csdn.net/qq_37529913/article/details/119770527
C++ STL reverse_iterator反向迭代器适配器(深入了解,一文学会) https://blog.csdn.net/qq_37529913/article/details/119814820
C++ STL insert_iterator插入迭代器适配器(深入了解,一文学会) https://blog.csdn.net/qq_37529913/article/details/119834378
C++ STL stream_iterator流迭代器(深入了解,一文学会) https://blog.csdn.net/qq_37529913/article/details/119834429
C++ STL streambuf_iterator流缓冲区迭代器(深入了解,一文学会) https://blog.csdn.net/qq_37529913/article/details/119850048
C++ STL move_iterator移动迭代器(深入了解,一文学会) https://blog.csdn.net/qq_37529913/article/details/119859888
C++ STL advance()函数(深入了解,一文学会) https://blog.csdn.net/qq_37529913/article/details/120008250
C++ STL distance()函数(深入了解,一文学会) https://blog.csdn.net/qq_37529913/article/details/120008300
C++ STL iterator迭代器(深入了解,一文学会) https://blog.csdn.net/qq_37529913/article/details/120008346
C++ STL const_iterator转换为iterator类型迭代器(深入了解,一文学会) https://blog.csdn.net/qq_37529913/article/details/120008324
C++ STL begin()和end()函数(深入了解,一文学会) https://blog.csdn.net/qq_37529913/article/details/120008459
C++ STL prev()和next()函数(深入了解,一文学会) https://blog.csdn.net/qq_37529913/article/details/120008481