foreach
ループを使用してQList<T>
を反復処理する場合、実施したテストでは、アイテムは標準のfor
ループを使用した場合と同じ順序で返されます。
私の質問は、foreach
は、自然な順序(QList
やQVector
など)を持つコンテナに対して、常にこのようなインデックスの数値順にアイテムを返しますか?たとえば、次の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";
}
foreach
マクロ(別名_Q_FOREACH
_)は、コンテナのbegin()
およびend()
イテレータ要求メソッドを使用します。
コンテナがQList
またはQVector
である場合、例は常に同等になります。 foreach
ソースコード here を表示できます。
foreach
マクロは素晴らしいものではありませんが、コンテナのコピーを作成するため、暗黙的な共有をサポートするコンテナでのみ使用してください。利用可能な場合はC++ 11 for( : ) {}
ループを使用します。そうでない場合、Boostには同等の優れた機能があります。
見つかった情報に基づいて here 、foreach
は最初のものよりはるかに遅く、同等ではないことを示唆しています。