Поскольку вы действительно не знаете, почему произошло исключение, и за несколькими исключениями требуется очень специальная машина для правильной обработки (если это вообще возможно), например, исключение OutOfMemoryException и аналогичные исключения на уровне системы.
Поэтому вы должны улавливать исключения:
Увеличение итератора, возвращенного из end()
любого из стандартных контейнеров библиотеки C ++, приводит к неопределенному поведению. Из-за детализации реализации, общей для большинства реализаций std::list<T>
, он может работать для увеличения list.end()
, но нет гарантии, что он это делает.
Нет, это не нормально. Итератором std::list
является BidirectionalIterator , который является уточнением ForwardIterator . Предварительное условие для ++i
и i++
для ForwardIterator:
blockquote>
i
является разыскиваемым, которое не выполняется для
end()
так как он прошёл последний элемент списка.