28

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

私の質問は、自然な順序付け ( と のような) を持つコンテナーの場合、常にforeachこのようにインデックスの番号順でアイテムを返すことですか? たとえば、次は常に同等ですか?QListQVector

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";
}
4

2 に答える 2

33

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

したがって、コンテナがQListまたはのQVector場合、例は常に同等になります。foreachソースコードはこちらからご覧いただけます。

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

于 2013-05-30T07:29:43.807 に答える
3

ここにある情報に基づくと、foreachは最初のものよりもはるかに遅く、同等ではないことが示唆されます。

于 2013-05-29T23:24:32.787 に答える