首页 > 后端开发 > C++ > 如何在 C 迭代过程中安全地从向量中删除元素?

如何在 C 迭代过程中安全地从向量中删除元素?

Barbara Streisand
发布: 2024-12-04 04:09:13
原创
182 人浏览过

How to Safely Remove Elements from a Vector During Iteration in C  ?

从循环内的向量中删除元素

迭代向量时,可能存在需要根据以下条件删除元素的情况:某些标准。但是,尝试在迭代时修改向量可能会导致运行时错误。

考虑以下场景:

for (vector<Player>::iterator it = allPlayers.begin(); it != allPlayers.end(); it++) {
  if (it->getpMoney() <= 0)
    it = allPlayers.erase(it);
  else
    ++it;
}
登录后复制

此代码旨在删除零钱或负钱的玩家。但是,它会失败并出现与赋值运算符相关的错误。要解决此问题,请避免在循环内递增迭代器。相反,依赖于erase()函数返回的迭代器。

for (vector<Player>::iterator it = allPlayers.begin(); it != allPlayers.end(); /*it++*/) {
  if (it->getpMoney() <= 0)
    it = allPlayers.erase(it);
  else
    ++it;
}
登录后复制

此外,erase()函数使用operator=要求Player类是可分配的,这意味着Player类必须实现赋值运算符。

向量的擦除-删除习语操作

为了简化从向量中删除元素的任务,请采用擦除删除惯用法:

allPlayers.erase(
  std::remove_if(
    allPlayers.begin(),
    allPlayers.end(),
    [](Player const &amp; p) { return p.getpMoney() <= 0; }
  ),
  allPlayers.end()
);
登录后复制

该惯用法结合了remove_if()算法来识别要删除的元素。擦除和擦除()方法删除所需的范围。

以上是如何在 C 迭代过程中安全地从向量中删除元素?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板