1.定义:
在容器中从尾元素向首元素反向移动的迭代器
对于反向迭代器,递增和递减的含义会颠倒过来
递增一个反向迭代器会移动到前一个元素
递减一个迭代器会移动到下一个元素
注意:除了forward_list容器之外,其他容器都支持反向迭代器
2.使用反向迭代器的相关函数
3.反向迭代器与正向迭代器的比较
4.反向迭代器应用之逆序打印数组元素
vector<int> vec = {
1,2,3,4,5,6 };
for (auto it = vec.rbegin(); it != vec.rend(); it++)
{
cout << *it << " ";
}
5.反向迭代器应用之递减序
vector<int> vec = {
1,2,3,4,5,6 };
cout << "整理为递减序后,正序打印: " << endl;
sort(vec.rbegin(), vec.rend());
for_each(vec.begin(), vec.end(), [](int val) {
cout << val << " "; });
7.反向迭代器和其他迭代器之间的关系
string line = "bird,dog,duck,pig";
auto comma = find(line.begin(), line.end(), ',');
cout << string(line.begin(), comma) << endl;//这里是一个临时对象
string line = "bird,dog,duck,pig";
auto comma = find(line.rbegin(), line.rend(), ',');
cout << string(line.rbegin(), comma) << endl;//这里是一个临时对象
//错误:将逆序输出单词的字符
cout << string(line.rbegin(), comma) << endl;//这里是一个临时对象
问题所在:
string line = "bird,dog,duck,pig";
auto rcomma = find(line.crbegin(), line.crend(), ',');
cout << string(rcomma.base(), line.cend())<< endl;//这里是一个临时对象
8.总结:
反向迭代器的目的是表示元素范围,而这些范围是不对称的,这导致一个重要的结果:
当我们从一个普通迭代器初始化一个反向迭代器,或是给一个反向迭代器赋值时,结果迭代器与原迭代器指向的并不是相同的元素。