проверить границы в случайном постфиксе и префиксе реализации итератора - PullRequest
0 голосов
/ 05 августа 2020

Я пытаюсь реализовать Iterator класса Vector (аналогично классам stl), и я не уверен, нужно ли мне проверять границы, прежде чем увеличивать / уменьшать итератор. Если мне не нужно проверять, что произойдет, если возникнет исключение, и если мне нужно проверить, что произойдет, если есть исключение?

1 Ответ

0 голосов
/ 05 августа 2020

Стандарт не требует проверки std::vector::iterator::operator++. Увеличение значения после end или уменьшение после begin является неопределенным поведением.

Неопределенное поведение не означает означает «выдает исключение». Поскольку он не определен, реализация, которая выбрасывает, является допустимой, как и реализация, считывающая смежную память.

Если вы хотите определить свой Vector класс, который будет выдавать при выходе за пределы допустимого диапазона, вы можете. Для этого потребуется, чтобы ваш итератор имел доступ к пределам диапазона, что означает больше переменных-членов. Обычно std::vector<T>::iterator содержит (или равно ) один T*.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...