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; } }

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; } },c++,vector,C++,Vector,擦除不会失败。如果您以某种方式传递相同的参数以进行第二次擦除,那么它将尝试删除其他内容。这取决于可能导致它删除您不打算删除的内容的确切情况,或者如果参数不再有效,它可能会导致内存损坏并可能导致程序崩溃 然而,在您展示的代码片段中,我不认为这是一个问题。一旦任何敌人从矢量中清除,回路就不可能再次遇到它,甚至无法尝试对其进行另一次射击测试 尽管存在不同的问题:当从向量中删除元素时,向量中所有后续元素的索引向下移动1。如果向量中有4个元素,那么它们的索引将为0,1,2,3。如果删除索引1处的元素,那么

擦除不会失败。如果您以某种方式传递相同的参数以进行第二次擦除,那么它将尝试删除其他内容。这取决于可能导致它删除您不打算删除的内容的确切情况,或者如果参数不再有效,它可能会导致内存损坏并可能导致程序崩溃

然而,在您展示的代码片段中,我不认为这是一个问题。一旦任何敌人从矢量中清除,回路就不可能再次遇到它,甚至无法尝试对其进行另一次射击测试


尽管存在不同的问题:当从向量中删除元素时,向量中所有后续元素的索引向下移动1。如果向量中有4个元素,那么它们的索引将为0,1,2,3。如果删除索引1处的元素,那么剩下3个元素的索引为0、1、2。代码的结果是,当INDEX处的一个元素被擦除时,另一个元素将向下移动以取代该位置。但是循环只是继续并增加索引,这样就跳过了一个元素。

可能会发生这样的情况:您使用相同的索引从vRegularShots中删除了几次,而没有检查索引是否仍在范围内。

您真的想使用来执行此操作。

请提供一些示例代码来演示你有一个问题,“剧本”是什么?C++代码通常不被称为脚本,而且当程序终止时,不管怎样,向量都不会粘在一起……什么是拳头脚本?做某事意味着什么?还是埃尔斯?你怎么吃午饭?谁是敌人?好的,这两个代码是相同的,唯一不同的是在第二个代码中,vS1Enemie1变为vS2Enemie1。当鼠标按下时,我吃了一枪,敌人是一些squars@abelenky当前位置你有没有想过英语可能不是他的第一语言?尽管你说了这么多话,我还是很容易理解他的意思。你也是。我更新了帖子,但现在每次我射击了什么东西,它击中了敌人,我都会再次出错。如果我不增加elmenet,如果if station等于false,它将永远循环
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++;
  }