std :: out_of_range错误

SB2*_*B26 4 c++ opencv std out

我正在使用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;
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

Mar*_*lon 5

问题是,当有效索引为0到N-1时,您正在使用从0到N的循环.这就是您在最后一次迭代时获得异常的原因:std::vector::at执行绑定检查,如果超出范围,std::out_of_range则抛出a.

你需要改变你的循环条件<,而不是<=.

for (int i = 0; i < x_captured.size(); i++)
{
    for (int j = 0; j < y_captured.size(); j++)
    {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)