3

1) 在 AS3 中,如果有问题的数组在for...循环期间发生变化,是否可以保证像for each这样的无计数器循环工作?通过更改,我的意思是从数组中插入/删除元素

2) 如果在循环执行到一半之后将一个元素插入到数组中,这个元素还会被for each循环访问吗?

3) 上述任何答案是否适用于 c++ *for_each*和 C++11 基于范围的 for 循环?

编辑 :

好的,因为很明显,无计数器循环并不聪明,有谁知道是否有现成的智能库不会因任何一种语言而崩溃?这样我就不必重新发明轮子了?

4

1 回答 1

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++,需要进行自定义循环以避免迭代器失效。

正如 Mahesh 所说: http: //kera.name/articles/2011/06/iterator-invalidation-rules/

于 2013-09-21T21:28:25.210 回答