Ошибка подтверждения отладки! Индекс вектора выражения вне диапазона
не является исключением. Это отладчик сообщает вам, что ваша программа вышла за пределы и остановила вас, чтобы вы могли проверить программу и узнать, как это произошло, чтобы предотвратить выход программы за пределы. Вы не можете этого поймать. Вам необходимо исправить ошибку, которая позволила программе получить доступ к недействительной памяти.
В C ++ существует политика, не заставляющая программу платить за все, о чем явно не просили. В этом случае проверка, необходимая для создания перехватываемого исключения, замедляет работу программы, поэтому оператор []
не выполняет никаких проверок 1 . Вы получаете более быструю программу, но вы-программист должны пообещать, что программа никогда go не выйдет за пределы.
Метод std::vector::at
проверяет и выдаст исключение, но, используя at
, вы выбрали более медленную программу.
1 Не требует любых проверок - лучший способ слово это. В этом случае реализация vector
в отладочной версии реализации стандартной библиотеки MicroSoft по умолчанию выполняет проверку и выводит сообщение «Debug Assertion Failed!» сообщение - это прямой результат. Сборки отладки оптимизированы для упрощения отладки и имеют тенденцию быть медленными. Эта проверка не выполняется в библиотеке выпуска, потому что сборки выпуска оптимизированы для производительности.