Формулировка документа для 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 в настоящее время указывает на.

Я что-то упустил или формулировка неверная? Если нет, то что не так в моей интерпретации?

Не уверен, стоит ли мне добавить языкового юриста .

( Связанный вопрос .)

0 ответов

Другие вопросы по тегам