std :: out_of_range ошибка
Вопрос
Я работаю над следующим кодом в OpenCV в Linux Ubuntu. x_captured и y_captured являются векторами типа «int». Размер обоих векторов составляет 18.
for (int i=0;i<=x_captured.size();i++)
{
for (int j=0;j<=y_captured.size();j++)
{
if (i!=j)
{
if (((x_captured.at(j)-x_captured.at(i))<=2) &&
((y_captured.at(j)-y_captured.at(i))<=2))
{
consecutive=consecutive+1;
}
}
}
}
Но когда я = 0 и j = 18 после этого, он подает следующую ошибку:
Завершение вызвано после того, как бросил экземпляр 'std :: out_of_range' what (): ecector :: _ m_range_check
Решение
for (int i=0;i<=x_captured.size();i++)
{
for (int j=0;j<=y_captured.size();j++)
Вы должны изменить <=
к <
и попробуй еще раз.
Пример массива по имени Билли: Размер: 5, но последний индекс - 4. Получите его? :)
Другие советы
Проблема в том, что вы используете цикл от 0 до N, когда действительные индексы составляют от 0 до N - 1. Вот почему вы получаете исключение на последней итерации: std::vector::at
выполняет связанную проверку, если у вас нет границ, то std::out_of_range
брошен.
Вам нужно изменить состояние цикла на <
, нет <=
.
for (int i = 0; i < x_captured.size(); i++)
{
for (int j = 0; j < y_captured.size(); j++)
{
...
}
}