Вопрос

Я работаю над следующим кодом в 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++)

Вы должны изменить <= к < и попробуй еще раз.

enter image description here

Пример массива по имени Билли: Размер: 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++)
    {
        ...
    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top