2013-03-27 92 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