从向量中删除元素

Ben*_*Ben 1 c++ vector

下面的C++代码用一些对象填充一个向量,然后删除其中的一些对象,但看起来它删除了错误的对象:

vector<Photon>  photons;

photons = source->emitPhotons();    // fills vector with 300 Photon objects

for (int i=0; i<photons.size();  i++) {
    bool useless = false;

    // process photon, set useless to true for some

    // remove useless photons
    if (useless) {
        photons.erase(photons.begin()+i);
    }
}
Run Code Online (Sandbox Code Playgroud)

我这样做了吗?我在想这条线photons.erase(photons.begin()+i);可能是问题?

Nim*_*Nim 7

绝对是错误的做法,你永远不会i在你删除时调整..

使用迭代器,这个问题就消失了!

例如

for(auto it = photons.begin(); it != photons.end();)
{
  if (useless)
    it = photons.erase(it);
  else
    ++it;
}
Run Code Online (Sandbox Code Playgroud)

存在使用算法(如其他方式remove_iferase等),但以上是最清晰...