以下 C++ 代码用多个对象填充 vector ,然后删除其中一些对象,但看起来它删除了错误的对象:
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);
}
}
我这样做正确吗?我在想 photons.erase(photons.begin()+i);
这行可能是问题所在?
最佳答案
绝对是错误的做法,你永远不会在删除时向下调整 i
..
使用迭代器,这个问题就迎刃而解了!
例如
for(auto it = photons.begin(); it != photons.end();)
{
if (useless)
it = photons.erase(it);
else
++it;
}
还有其他使用算法的方法(如remove_if
和erase
等),但上面最清楚...
关于c++ - 从 vector 中删除元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9228705/