web-dev-qa-db-ja.com

Qt foreachループの順序とQListのforループ

foreachループを使用してQList<T>を反復処理する場合、実施したテストでは、アイテムは標準のforループを使用した場合と同じ順序で返されます。

私の質問は、foreachは、自然な順序(QListQVectorなど)を持つコンテナに対して、常にこのようなインデックスの数値順にアイテムを返しますか?たとえば、次のalwaysと同等ですか?

QList<T> list;

for( int i=0; i<list.count(); ++i )
{ 
    // process items in numerical order by index
    // do something with "list[i]";
}

foreach( T item, list )
{ 
    // will items always be processed in numerical order by index?
    // do something with "item";
}
22
Freedom_Ben

foreachマクロ(別名_Q_FOREACH_)は、コンテナのbegin()およびend()イテレータ要求メソッドを使用します。

コンテナがQListまたはQVectorである場合、例は常に同等になります。 foreachソースコード here を表示できます。

foreachマクロは素晴らしいものではありませんが、コンテナのコピーを作成するため、暗黙的な共有をサポートするコンテナでのみ使用してください。利用可能な場合はC++ 11 for( : ) {}ループを使用します。そうでない場合、Boostには同等の優れた機能があります。

32
cmannett85

見つかった情報に基づいて hereforeachは最初のものよりはるかに遅く、同等ではないことを示唆しています。

4
Krozark