2013-03-27 33 views
0

人喜一个简单的问题:清除向量空间

我设置了向量到一定规模后,我想要做的是空的是矢量,一旦它击中的最大空间。

我有这样的代码如下:

vector<Point> Rightarm(20); 
    vector<Point> Leftarm(20); 

    vector<Point>::const_iterator RightIter; 
    vector<Point>::const_iterator LeftIter; 

Rightarm.push_back(center); 
    Leftarm.push_back(center1); 

    for(RightIter = Rightarm.begin(); RightIter != Rightarm.end(); ++RightIter) 
    { 
     circle(drawing, *RightIter, 3, Scalar(0,255,0), CV_FILLED); 
    } 

    if(RightIter == Rightarm.end()) 
     { 
      Rightarm.clear(); 
     } 

    for(LeftIter = Leftarm.begin(); LeftIter != Leftarm.end(); ++LeftIter) 
    { 
     circle(drawing, *LeftIter, 3, Scalar(0,255,0), CV_FILLED); 

    } 

     if(LeftIter == Leftarm.end()) 
     { 
      Leftarm.clear(); 
     } 

我有这段代码的问题是,载体被清除,每次...如果我希望它击中的大小限制后,才清空的20 ....

任何人都可以发现哪里出错了?...?

+2

首先,*哪个向量*?你有两个。其次,“Rightarm”和“Leftarm”都会随着你在这里的代码被清除。上面的for循环的终止保证了。看看每个for-loop的持续状态。现在看看每个清除相应向量的if条件。嗯.... – WhozCraig 2013-03-27 19:28:36

+0

3个向量只有2个右臂和左臂以及2个迭代器......并且这就是我遇到的问题,它总是清除我想要向量被清空的位置,只有当它们达到最大容量时20 – Tomazi 2013-03-27 19:31:18

+1

您只需*将* size *设置为20.因此,根据您默认构建的“Point”,每个状态下有20个对象。然后你重复遍历每一个,当你到达最后时停止,并清除如果你达到最后。也许使用capcity()并检查size()会更好。 – WhozCraig 2013-03-27 19:33:43

回答

1

矢量总是被清除,因为Leftarm.end()总是指向左臂的末尾。如果Leftarm有6个元素,则LeftIter指向第6个元素的结尾。因此,在你的代码中,Leftarm向量总是被清除。改变你的代码,包括这部分:

if(Leftarm.size()==20) //or >=20 
{ 
    Leftarm.clear(); 
} 
+0

我已经试过这dosent工作,我收到了警告,在(==)的compailer美国这样的:错误:没有运营商“==”匹配这些操作数。Thx为你的答案面团 – Tomazi 2013-03-27 19:35:02

+0

其实你的回答是正确的......我之所以会犯错,是因为我的向量存储了一个手臂的中心位置,而且随着手臂移动一个圆圈被淹死来追踪运动。所以,即使我清空矢量,绘制的点仍留在图像上,这就是为什么我虽然是错的,但它实际上工作:D – Tomazi 2013-03-27 19:41:30

+1

你确定你输入正确吗? ('大小'不'结束') – didierc 2013-03-27 19:42:11