当BOOST_FOREACH遍历容器时更改容器

Changes to a container while BOOST_FOREACH is iterating through it?

本文关键字:遍历 BOOST FOREACH      更新时间:2023-10-16

如果在BOOST_FOREACH作用域中更改了BOOST_FOREACH正在迭代的容器,会发生什么?

BOOST_FOREACH"冻结"初始状态吗?

在这种情况下,行为是未定义的。查看BOOST_FOREACH官方文档中的提升和迭代器失效

我想这取决于容器。

真正的问题是,用于遍历的(剩余的)迭代器范围是否无效。

这取决于变化。std算法指定了它们的行为:它们提到哪些迭代器在什么时候失效。

更新

也可以取决于迭代器的类型

  • vector::erase使所有后续迭代器失效
  • list::erase