STL 为 vector 容器配备了随机访问的迭代器和反向迭代器,可以用来随机访问 vector 容器中的元素。
反向迭代器它们每对都可以分别得到指向最一个元素和第一个元素前一个位置的随机访问迭代器,又称它们为反向迭代器。
在使用反向迭代器进行 ++ 或 – 运算时,++ 指的是迭代器向左移动一位,-- 指的是迭代器向右移动一位,即这两个运算符的功能也 “互换” 了。
使用 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
,如下图所示:
我们看到,我们使用了反向迭代器访问了数组的所有元素。
使用 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
,如下图所示:
我们使用 crbegin 和 crend 迭代器遍历 vector 时,我们发现是从最后一个元素开始遍历到第一个元素的。
反向迭代器它们每对都可以分别得到指向最一个元素和第一个元素前一个位置的随机访问迭代器,又称它们为反向迭代器。
在使用反向迭代器进行 ++ 或 – 运算时,++ 指的是迭代器向左移动一位,-- 指的是迭代器向右移动一位,即这两个运算符的功能也 “互换” 了。