从循环中的列表中删除元素而不中断

Guu*_*ink 1 c++

在我的游戏代码中,我想从a中删除一些元素list,
这些元素发生在循环中.我遇到的唯一问题是,当我使用时,
list::erase我必须在该函数之后断开,因为我认为
list变得"过时"了.这会导致一点点闪烁,我想
尝试删除它.

目前的代码是这样的:

for(list<Arrow*>::iterator it = arrows.begin(); it != arrows.end(); it++)
{
    Arrow* a = (*it);

    if(a->isActive() == true)
    {
        a->update();
    }
    else
    {
        arrows.erase(it);
        break;
    }
}
Run Code Online (Sandbox Code Playgroud)

先感谢您!

编辑:对不起,我对矢量和列表感到困惑.得到了答案,谢谢!

use*_*204 8

你应该做:

it = arrows.erase(it);
Run Code Online (Sandbox Code Playgroud)

//

list<Arrow*>::iterator it = arrows.begin();
while (it != arrows.end())
{
  Arrow* a = (*it);

  if(a->isActive())
  {
    a->update(); ++it;
  }
  else{ // delete (a); ???
   it=arrows.erase(it);}

}
Run Code Online (Sandbox Code Playgroud)

  • @ user928204为什么? (2认同)