A vector
выполнит проверку границ, если вы используете функцию at()
, например:
std::vector<int> v(5);
v.at(3) = 10;
v.at(5) = 20; // throws an exception, std::out_of_range
Однако, если вы используете operator[]
, проверка границ не будет.(А доступ к несуществующим элементам приводит к неопределенному поведению.)
Следует отметить, однако, что большинство реализаций будет иметь возможность включать проверку границ для всех итераторов, что обсуждается вответы здесь .По умолчанию VS2008 и ниже имеют его в Отладке и Выпуске, VS2010 делает только в Отладке.gcc требует, чтобы вы определили _GLIBCXX_DEBUG
для получения проверенных итераторов.