STL vector反向迭代器

STL vector反向迭代器教程

STL 为 vector 容器配备了随机访问的迭代器和反向迭代器,可以用来随机访问 vector 容器中的元素。

反向迭代器它们每对都可以分别得到指向最一个元素和第一个元素前一个位置的随机访问迭代器,又称它们为反向迭代器。

在使用反向迭代器进行 ++ 或 – 运算时,++ 指的是迭代器向左移动一位,-- 指的是迭代器向右移动一位,即这两个运算符的功能也 “互换” 了。

案例

vector rbegin和rend反向迭代器

使用 rbegin 和 rend 反向迭代器访问元素

#include <iostream> #include <vector> using namespace std; int main() { cout << "嗨客网(www.haicoder.net)\n" << endl; vector<int> vec{10, 20, 30, 40, 50}; auto first = vec.rbegin(); auto last = vec.rend(); while (first != last) { cout << *first << " "; ++first; } cout << "\n"; return 0; }

因为,这里需要使用 C++ 11,因此,我们在 Linux 下使用 g++ 进行编译,具体命令如下:

g++ vector.cpp -std=c++11

编译后,我们直接运行生成的二进制文件 a.out,如下图所示:

19_C STL vector反向迭代器.png

我们看到,我们使用了反向迭代器访问了数组的所有元素。

vector crbegin和crend反向迭代器

使用 vector crbegin 和 crend 反向迭代器访问元素

#include <iostream> #include <vector> using namespace std; int main() { cout << "嗨客网(www.haicoder.net)\n" << endl; vector<string> arr{"Hello", "HaiCoder"}; auto first = arr.crbegin(); auto last = arr.crend(); while (first != last) { cout << *first << " "; ++first; } cout << "\n"; return 0; }

编译后,我们直接运行生成的二进制文件 a.out,如下图所示:

20_C STL vector反向迭代器.png

我们使用 crbegin 和 crend 迭代器遍历 vector 时,我们发现是从最后一个元素开始遍历到第一个元素的。

STL vector反向迭代器总结

反向迭代器它们每对都可以分别得到指向最一个元素和第一个元素前一个位置的随机访问迭代器,又称它们为反向迭代器。

在使用反向迭代器进行 ++ 或 – 运算时,++ 指的是迭代器向左移动一位,-- 指的是迭代器向右移动一位,即这两个运算符的功能也 “互换” 了。