下面的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);
可能是问题?
绝对是错误的做法,你永远不会i
在你删除时调整..
使用迭代器,这个问题就消失了!
例如
for(auto it = photons.begin(); it != photons.end();)
{
if (useless)
it = photons.erase(it);
else
++it;
}
Run Code Online (Sandbox Code Playgroud)
存在使用算法(如其他方式remove_if
和erase
等),但以上是最清晰...
归档时间: |
|
查看次数: |
440 次 |
最近记录: |