Формулировка документа для std::reverse_iterator <Iter> ::base на cppreference
Эта сокращенная версия примера на cppreference
#include <iostream>
#include <iterator>
#include <vector>
int main()
{
std::vector<int> v = { 0, 1, 2, 3, 4, 5 };
using RevIt = std::reverse_iterator<std::vector<int>::iterator>;
const auto it = v.begin() + 3;
RevIt r_it{it};
std::cout << "*it == " << *it << '\n'
<< "*r_it == " << *r_it << '\n'
<< "*r_it.base() == " << *r_it.base() << '\n';
}
дает
*it == 3
*r_it == 2
*r_it.base() == 3
что означает это:
0 1 2 3 4 5
^ ^
| |
| \--- it == r_it.base()
\----- r_it
Итак, для меня, с точки зрения того, что идет в направлении от 5 до 0,
*r_it
идет после
*r_it.base()
, потому что 2 идет после 3 при обходе
v
в обратном направлении (т.е. от
r_it
точка зрения). Таким образом, базовый итератор обратного итератора стоит перед элементом, на который указывает обратный итератор.
Однако формулировка cppreference следующая:
Базовый итератор относится к следующему элементу (начиная с
std::reverse_iterator::iterator_type
перспектива) элементуreverse_iterator
в настоящее время указывает на.
Я что-то упустил или формулировка неверная? Если нет, то что не так в моей интерпретации?
Не уверен, стоит ли мне добавить языкового юриста .
( Связанный вопрос .)