2011-11-30 205 views
4

我正在研究Linux Ubuntu中opencv中的以下代码。 x_captured和y_captured是“int”型向量。两个矢量的大小为18。std :: out_of_range错误

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后,它引发以下错误:

terminate called after throwing an instance of 'std::out_of_range' what(): vector::_M_range_check

回答

4
for (int i=0;i<=x_captured.size();i++) 
     { 
      for (int j=0;j<=y_captured.size();j++) 

,则应该更换<=<,然后再试一次。

enter image description here

例阵列名为比利:尺寸:5,但最后指数是4,明白了吗? :)

+4

请注意你的消息来源:[“完整的C++教程”](http://www.cplusplus.com/doc/tutorial/arrays/)(点击查看更多!)JuanSoulié(download [as PDF] (http://www.cplusplus.com/files/tutorial.pdf)) – sehe

+0

@sehe哈哈,这是第一个想到的地方:) – FailedDev

5

的问题是,使用的是循环从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++) 
    { 
     ... 
    } 
} 
相关问题