Список stl предоставляет круглый контейнер [дубликат]

Поскольку вы действительно не знаете, почему произошло исключение, и за несколькими исключениями требуется очень специальная машина для правильной обработки (если это вообще возможно), например, исключение OutOfMemoryException и аналогичные исключения на уровне системы.

Поэтому вы должны улавливать исключения:

  • , которые вы точно знаете, как с этим бороться (например, FileNotFoundException или так)
  • , когда вы повторно их поднимете после этого (например, для выполнения очистки после сбоя)
  • , когда вам нужно передать исключение в другой поток
5
задан Industrial-antidepressant 20 October 2012 в 20:41
поделиться

2 ответа

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

8
ответ дан Dietmar Kühl 25 August 2018 в 11:38
поделиться

Нет, это не нормально. Итератором std::list является BidirectionalIterator , который является уточнением ForwardIterator . Предварительное условие для ++i и i++ для ForwardIterator:

i является разыскиваемым

, которое не выполняется для end() так как он прошёл последний элемент списка.

4
ответ дан Thomas 25 August 2018 в 11:38
поделиться