【问题标题】:Genenal solution for modifying while iterate over c++ containers?迭代 c++ 容器时修改的通用解决方案?
【发布时间】:2023-04-08 02:34:01
【问题描述】:

需要在迭代 c++ 容器时进行修改。

就像将回调存储在 std::list 中一样,当迭代并调用这些回调时,可能需要修改 std::list

但这并不是开箱即用的安全方法。这种问题有什么通用的解决方案吗?

【问题讨论】:

  • 为了让容器在迭代过程中可以修改,它需要是所谓的稳定的。 stackoverflow.com/questions/16709828/…
  • 显示您的代码,我们可以帮助您做到这一点。您的问题似乎是 XY 问题。

标签: c++ iterator


【解决方案1】:

有时我需要在迭代时从容器中删除项目。 使用 c++11(擦除返回下一个迭代器)你可以像这段代码一样。

  std::vector<MyClass> vector;
  std::vector<MyClass>::iterator it;
  for(it=vector.begin();it!=vector.end();)
  {
    if(it->removeFromList())
    {
      it=vector.erase(it);
    }
    else
    {
      it->doSomething();
      ++it;
    } 
  }

您想如何准确地编辑容器?

【讨论】:

  • 这不是for 循环的目的,使用while 循环来做到这一点。用空格缩进你的代码。
猜你喜欢
  • 2013-07-22
  • 1970-01-01
  • 2016-03-19
  • 1970-01-01
  • 2020-06-07
  • 1970-01-01
  • 1970-01-01
  • 2021-01-30
  • 1970-01-01
相关资源
最近更新 更多