4

我正在 Linux Ubuntu 的 opencv 中处理以下代码。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;
            }
        }
    }
}

但是当 i=0 和 j=18 之后它会抛出以下错误:

在抛出 'std::out_of_range' what(): vector::_M_range_check 的实例后调用终止

4

2 回答 2

5

问题是当有效索引为 0 到 N - 1 时,您正在使用从 0 到 N 的循环。这就是为什么您在最后一次迭代中遇到异常:std::vector::at执行边界检查,如果超出范围则std::out_of_range抛出 an。

您需要将循环的条件更改为<,而不是<=

for (int i = 0; i < x_captured.size(); i++)
{
    for (int j = 0; j < y_captured.size(); j++)
    {
        ...
    }
}
于 2011-11-30T19:37:02.773 回答
4
for (int i=0;i<=x_captured.size();i++)
        {
            for (int j=0;j<=y_captured.size();j++)

您应该更改<=<并重试。

在此处输入图像描述

名为 Billy 的示例数组:大小:5 但最后一个索引是 4。明白吗?:)

于 2011-11-30T19:37:14.390 回答