场景
std::vector里有rbegin()和rend()反转枚举迭代器,我们可以通过这个反转枚举std::vector<T>::reverse_iterator进行倒序迭代,问题是当使用反转枚举时如果有需要删除的元素怎么办?vector.erase()方法的参数只能是索引枚举std::vector<T>::iterator,不能是反转枚举。
说明
索引枚举和反转枚举是存在下标对应关系
如图1. 反转枚举整体向右平移一个元素,它左边第一元素就是.rend(). 通过reverse_iterator.base()对应的iterator是图1所示的垂直对应的。
图1:
反转枚举转换为索引枚举通过调用rite.base()获得索引枚举;而创建反转枚举需要索引枚举作为参数vector<int>::reverse_iterator(ite)。
索引枚举和反转枚举对应的元素转换关系: