我正在使用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
答案 0 :(得分:5)
问题是当有效索引为0到N-1时,您使用从0到N的循环。这就是您在最后一次迭代时获得异常的原因: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++)
{
...
}
}
答案 1 :(得分:4)
for (int i=0;i<=x_captured.size();i++)
{
for (int j=0;j<=y_captured.size();j++)
您应该将<=
更改为<
,然后重试。
名为Billy的示例数组:大小:5但最后一个索引是4.获取它? :)