6

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

BOOST_FOREACH 是否“冻结”初始状态?

4

2 回答 2

9

在这种情况下,行为是未定义的。查看. _ _BOOST_FOREACH

于 2011-04-21T11:51:59.560 回答
2

我想这取决于容器。

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

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

更新

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

  • vector::erase使所有后续迭代器无效
  • list::erase才不是
于 2011-04-21T11:52:17.303 回答