c.rbegin() 返回一个逆序迭代器,它指向容器c的最后一个元素
c.rend() 返回一个逆序迭代器,它指向容器c的第一个元素前面的位置
但是注意rbegin,rend的类型和begin,end不一样
前者是反向迭代器(reverse_iterator),后者是迭代器(iterator)
对reverse_iterator执行递增将导致它递减
来看看实际使用:
#include<iostream>
#include<vector>
using namespace std;
int main()
{
int a[5] = { 1,2,3,4,5 };
vector<int> v(a, a + 5);
for (auto r_it = v.rbegin(); r_it != v.rend(); ++r_it)
cout << *r_it << " ";//5 4 3 2 1
return 0;
}
来看看应用,大家知道find的功能,现在如果用find倒着找到第一个满足条件的迭代器呢?
#include<iostream>
#include<vector>
int main()
{
/
std::vector<int> v = { 1,2,3,4,5,6,2,8,9,10 };
auto it1 = v.begin();
auto it2 = std::find(v.begin(), v.end(), 2);
std::cout << std::distance(it1, it2) << std::endl;//1
/
auto it3 = v.rbegin();
std::cout << *it3 << std::endl;//10
std::cout << *(++it3) << std::endl;//9
/
it3 = v.rbegin();//指向最后一个位置
auto it4 = std::find(v.rbegin(), v.rend(), 2);
std::cout << std::distance(it4, it3) << std::endl;//-3
return 0;
}