STL array反向迭代器

STL array反向迭代器教程

array 容器是 C++ 11 标准中新增的 序列容器,同时,STL 也为 array 容器配备了随机访问的迭代器和反向迭代器,可以用来随机访问 array 容器中的元素。

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

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

案例

rbegin和rend反向迭代器

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

#include <iostream> #include <array> using namespace std; int main() { cout << "嗨客网(www.haicoder.net)\n" << endl; array<int, 5> arr; int v = 1; auto first = arr.rbegin(); auto last = arr.rend(); while (first != last) { *first = v; ++first; v++; } first = arr.rbegin(); while (first != last) { cout << *first << " "; ++first; } cout << "\n"; return 0; }

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

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

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

05_C STL array反向迭代器.png

我们看到,我们首先使用了反向迭代器对数组的元素进行了赋值,接着,我们再次使用了反向迭代器访问了数组的所有元素。

crbegin和crend反向迭代器

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

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

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

06_C STL array反向迭代器.png

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

STL array反向迭代器总结

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

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