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