c++ - 从 vector 中删除元素

标签 c++ vector

以下 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_iferase等),但上面最清楚...

关于c++ - 从 vector 中删除元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9228705/

相关文章:

c++ - 如何修复腐 eclipse 的矩形?

c++ - 在大型 MEMORY.DMP 文件中搜索字符串

c++ - 调用 std::vector::push_back() 会更改 vector 中先前的元素吗?

c++ - 使用 Boost Asio 和 OpenSSL 创建 HTTPS 请求

c++ - 分析共享库中的重复代码链接

c++ - 在if语句中将多个字符变量转换为数字

c++ - 用 vector 替换类 new[] 变量 - move 、复制运算符

c++ - 进一步拆分 vector 中某些元素的最佳方法

c++ - C++ vector 上的分配错误

c++ - 用 C++ 简化多项式中的项