Для поддержки идеи STL о полуоткрытых диапазонах, нам разрешено указывать на один конец массива. Предположим, у нас есть вектор из трех элементов. Если std :: vector :: iterator
реализован как указатель, как это обычно бывает в сборках выпуска, то begin
и end
указывают на эти местоположения:
+---+---+---+....
| | | | .
+---+---+---+....
^ ^
begin end
Где точки обозначают псевдоэлемент «один за концом». Поскольку не существует такой вещи, как «один перед началом», на что именно указывает rend
? Позвольте мне проиллюстрировать:
+---+---+---+....
| | | | .
+---+---+---+....
^ ^
rend rbegin
Ясно, что иллюстрация неверна, потому что rend
является недопустимым указателем. Итак, я предполагаю, что реализация std :: vector :: reverse_iterator
никогда не может быть указателем, даже в сборках релиза.
Я прав? Каким будет наиболее эффективный способ реализации reverse_iterator
тогда?