在c+上迭代时进行修改的通用解决方案+;容器? 有各种不同的情况,需要在C++容器上迭代修改。

在c+上迭代时进行修改的通用解决方案+;容器? 有各种不同的情况,需要在C++容器上迭代修改。,c++,iterator,C++,Iterator,就像回调存储在std::list中一样,当迭代并调用这些回调时,std::list可能需要修改 但这并不是开箱即用的安全方法。这种问题有什么通用的解决方案吗?有时我需要在迭代时从容器中删除项目。 使用c++11(擦除并返回下一个迭代器),您可以这样做 std::vector<MyClass> vector; std::vector<MyClass>::iterator it; for(it=vector.begin();it!=vector.end();)

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


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

有时我需要在迭代时从容器中删除项目。 使用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;
    } 
  }
std::vector;
std::vector::it迭代器;
for(it=vector.begin();it!=vector.end();)
{
如果(it->removeFromList())
{
它=向量。擦除(它);
}
其他的
{
它->doSomething();
++它;
} 
}

您希望如何准确地编辑容器?

为了使容器在迭代过程中可以修改,它需要是所谓的稳定容器。显示您的代码,我们可以帮助您做到这一点。您的问题似乎是XY问题。这不是
for
循环的目的,请使用
while
循环。用空格缩进代码。