1)在AS3中,如果有问题的数组在 期间发生变化,那么每个 的 的反无效循环都可以保证有效。 。 循环?通过更改,我的意思是插入/删除数组中的元素
2)如果在循环执行完毕后在数组中插入了一个元素,那么 是否仍会为每个 循环访问此元素?< / p>
3)上述任何答案是否适用于c ++ * for_each * 和C ++ 11基于范围的for-loop?
编辑:
好的,因为无论如何反无效循环显然都不聪明,有没有人知道是否有现成的智能库不会因这两种语言而失败?这样我就不用重新发明轮子了?
答案 0 :(得分:0)
快速测试显示AS3版本根本不聪明:
var a:Array = [0,1,2];
for each (var b:Number in a) {
trace(b);
if (a.length < 10) a.unshift(b+10);
}
结果:
0
0
0
0
0
0
0
0
1
2
它一次又一次地遍历同一个元素。
因此我的问题的第1部分和第2部分得到了解答(不,它远非保证)。谁知道3?
修改强> 的
同样适用于C ++,需要进行自定义循环以避免迭代器失效。
正如马赫什所说: http://kera.name/articles/2011/06/iterator-invalidation-rules/