如果BOOST_FOREACH正在迭代的容器在BOOST_FOREACH范围内被更改,会发生什么?
BOOST_FOREACH“冻结”初始状态吗?
答案 0 :(得分:9)
在这种情况下,行为未定义。请查看BOOST_FOREACH
的官方文档中的Hoisting and Iterator Invalidation。
答案 1 :(得分:2)
我想这取决于容器。
真正的问题是,遍历的(剩余)迭代器范围是否无效。
这取决于变化。 std
算法用它们的行为指定:它们提到迭代器在什么时候失效。
它还可以取决于迭代器的类型,
vector::erase
使所有后续迭代器无效list::erase
不