1) 在 AS3 中,如果有问题的数组在for...循环期间发生变化,是否可以保证像for each这样的无计数器循环工作?通过更改,我的意思是从数组中插入/删除元素
2) 如果在循环执行到一半之后将一个元素插入到数组中,这个元素还会被for each循环访问吗?
3) 上述任何答案是否适用于 c++ *for_each*和 C++11 基于范围的 for 循环?
编辑 :
好的,因为很明显,无计数器循环并不聪明,有谁知道是否有现成的智能库不会因任何一种语言而崩溃?这样我就不必重新发明轮子了?
1) 在 AS3 中,如果有问题的数组在for...循环期间发生变化,是否可以保证像for each这样的无计数器循环工作?通过更改,我的意思是从数组中插入/删除元素
2) 如果在循环执行到一半之后将一个元素插入到数组中,这个元素还会被for each循环访问吗?
3) 上述任何答案是否适用于 c++ *for_each*和 C++11 基于范围的 for 循环?
编辑 :
好的,因为很明显,无计数器循环并不聪明,有谁知道是否有现成的智能库不会因任何一种语言而崩溃?这样我就不必重新发明轮子了?
快速测试表明,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++,需要进行自定义循环以避免迭代器失效。
正如 Mahesh 所说: http: //kera.name/articles/2011/06/iterator-invalidation-rules/