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 に答える