2010-08-22 78 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仍处于范围