BOOST_FOREACH迭代时对容器的更改?

时间:2011-04-21 11:49:01

标签: c++ boost boost-foreach

如果BOOST_FOREACH正在迭代的容器在BOOST_FOREACH范围内被更改,会发生什么?

BOOST_FOREACH“冻结”初始状态吗?

2 个答案:

答案 0 :(得分:9)

在这种情况下,行为未定义。请查看BOOST_FOREACH的官方文档中的Hoisting and Iterator Invalidation

答案 1 :(得分:2)

我想这取决于容器。

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

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

更新

它还可以取决于迭代器的类型,

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