Куда указывает rend?

Для поддержки идеи STL о полуоткрытых диапазонах, нам разрешено указывать на один конец массива. Предположим, у нас есть вектор из трех элементов. Если std :: vector :: iterator реализован как указатель, как это обычно бывает в сборках выпуска, то begin и end указывают на эти местоположения:

    +---+---+---+....
    |   |   |   |   .
    +---+---+---+....
      ^           ^
    begin        end

Где точки обозначают псевдоэлемент «один за концом». Поскольку не существует такой вещи, как «один перед началом», на что именно указывает rend ? Позвольте мне проиллюстрировать:

    +---+---+---+....
    |   |   |   |   .
    +---+---+---+....
  ^           ^
rend       rbegin

Ясно, что иллюстрация неверна, потому что rend является недопустимым указателем. Итак, я предполагаю, что реализация std :: vector :: reverse_iterator никогда не может быть указателем, даже в сборках релиза.

Я прав? Каким будет наиболее эффективный способ реализации reverse_iterator тогда?

11
задан fredoverflow 5 December 2010 в 09:42
поделиться