Получение «векторного индекса вне диапазона» только в Visual Studio ...
Visual Studio верен в этом утверждении.
Отладочная версия среды выполнения Visual C ++ проверит индексы std::vector
и сообщит о проблемах при наличии доступа за пределами допустимого диапазона.
Другой используемый вами компилятор не сообщает вам об этой ошибке, поскольку в действительности operator []
для std::vector
имеет неопределенное поведение при доступе к элементу за пределами допустимого. Таким образом, вы ошибаетесь, когда видите вывод - ваша программа имеет ошибку «один за другим».
Чтобы доказать это, вот ваш код, но он использует at()
вместо [ ]
для доступа элементы:
#include <vector>
#include <iostream>
int main()
{
std::vector<int> v = {1,2,3,4,5,6,7,8};
std::vector<int>::iterator low = lower_bound(v.begin(), v.end(), 9);
if (v.at(low - v.begin()) == 9)
std::cout << "Yes " << (low - v.begin() + 1) << std::endl;
else
std::cout << "No " << (low - v.begin() + 1) << std::endl;// while this should be the output
}
Пример в реальном времени
Обратите внимание на исключение std::out_of_range
? Теперь вы получите ту же ошибку, независимо от того, какой компилятор вы будете использовать, поскольку vector::at()
выполняет проверку границ.
Теперь вот ваш оригинальный код:
Оригинал code
Обратите внимание, что вы получаете выходные данные, но вы «молча» обращаетесь к элементу «за пределами», поэтому поведение программы не определено.