2010-08-22 100 views
0

C++中有檢查擦除成功的方法嗎?
我有兩段代碼擦除同一個對象。第一次擦除對象,然後第二次擦除它,但沒有找到對象。 任何想法?C++向量擦除檢查

for(long indexs=0; indexs < (long)Enemie1.vS2Enemie1.size(); indexs++) 
    { 
    if((vRegularShots[index].x>=Enemie1.vS2Enemie1[indexs].x && vRegularShots[index].y>=Enemie1.vS2Enemie1[indexs].y && vRegularShots[index].y<=(Enemie1.vS2Enemie1[indexs].y+17) && vRegularShots[index].x<=(Enemie1.vS2Enemie1[indexs].x+17))||(Enemie1.vS2Enemie1[indexs].x>=vRegularShots[index].x && Enemie1.vS2Enemie1[indexs].y>=vRegularShots[index].y && Enemie1.vS2Enemie1[indexs].y<=(vRegularShots[index].y+16) && Enemie1.vS2Enemie1[indexs].x<=(vRegularShots[index].x+5))) 
    { 
    Enemie1.vS2Enemie1.erase(Enemie1.vS2Enemie1.begin()+indexs); 
    vRegularShots.erase(vRegularShots.begin()+index); 
    score+=100; 
    } 
} 

vregularshots認爲是推出了與vS2Enemie1持有的敵人射擊。如果有兩槍在同一時間觸及敵人,那麼它將循環拍攝並檢查它是否觸及任何敵人,然後清除敵人和槍擊。但是當另外一槍也觸及敵人時,它會試圖抹去已經被擦掉的敵人。
有什麼想法?


UPDATE

for(long indexs=0; indexs < (long)Enemie1.vS1Enemie1.size();) 
    { 
    if((vRegularShots[index].x>=Enemie1.vS1Enemie1[indexs].x && vRegularShots[index].y>=Enemie1.vS1Enemie1[indexs].y && vRegularShots[index].y<=(Enemie1.vS1Enemie1[indexs].y+17) && vRegularShots[index].x<=(Enemie1.vS1Enemie1[indexs].x+17))||(Enemie1.vS1Enemie1[indexs].x>=vRegularShots[index].x && Enemie1.vS1Enemie1[indexs].y>=vRegularShots[index].y && Enemie1.vS1Enemie1[indexs].y<=(vRegularShots[index].y+16) && Enemie1.vS1Enemie1[indexs].x<=(vRegularShots[index].x+5))) 
    { 
    Enemie1.vS1Enemie1.erase(Enemie1.vS1Enemie1.begin()+indexs); 
    vRegularShots.erase(vRegularShots.begin()+index); 
    score+=100; 
    } 
    else 
    indexs++; 
    } 
+0

請提供一些演示您所遇問題的示例代碼。 – 2010-08-22 05:42:57

+0

什麼是'腳本'? C++代碼通常不被稱爲腳本,反正矢量不會在程序終止時停留... – bdonlan 2010-08-22 05:51:17

+0

我編輯我的文章。 – Ramilol 2010-08-22 05:55:55

回答

0

erase不會失敗。如果你第二次以相同的參數傳遞erase,那麼它會嘗試刪除其他東西。根據可能導致它刪除您不想要的內容的確切場景,或者如果參數不再有效,可能會導致內存損壞並可能導致程序崩潰。

但是,在你展示的代碼片段中,我沒有看到這是問題。一旦任何敵人從矢量中消失,循環將無法再次遇到它,甚至不會嘗試再次對它進行測試。

雖然你確實有一個不同的問題:當一個元素從一個向量中被擦除時,向量中所有後續元素的索引向下移動1(如果向量中有4個元素,那麼它們會是索引0,1,2,3。如果擦除索引1處的元素,那麼您將有3個元素留下索引0,1,2)。您擁有的代碼的後果是當indexs處的元素是消除,另一個元素將下移到這個地方。但循環只是繼續並增加indexs,並且一個元素將被跳過。

+0

我更新了帖子,但現在每次我射擊東西,它擊中enemie我再次得到錯誤 – Ramilol 2010-08-22 06:24:26

+0

好,如果我不增加elmenet它將永遠循環,如果如果統計等於假 – Ramilol 2010-08-22 07:05:29

0

它可能發生,你使用相同的indexvRegularShots抹去了幾次都沒有檢查出index仍處於範圍