それは本当に問題ではありません。プログラムが遅い場合、これは問題ではない可能性があります。ただし、完全に同等の比較を行うわけではないことに注意してください。Qtforeach
はこれに似ています (この例では を使用しますQList<QString>
)。
for(QList<QString>::iterator it = Con.begin(); it != Con.end(); ++it) {
QString &str = *it;
// your code here
}
マクロは、いくつかのコンパイラ拡張機能 (GCC の など__typeof__
) を使用して、渡されたコンテナーのタイプを取得することでこれを行うことができます。また、ブーストのBOOST_FOREACH
概念は非常に似ていると想像してください。
あなたの例が公平ではない理由は、非 Qt バージョンが余分な作業を追加しているためです。
実際に反復するのではなく、インデックスを作成しています。非連続割り当ての型を使用している場合 (これは の場合であると思われますQList<>
)、コードは n 番目の項目が「どこにあるのか」を計算する必要があるため、インデックス作成のコストが高くなります。
そうは言っても。それでも構いません。これら 2 つのコード間のタイミングの違いは、存在するとしても無視できます。心配して時間を無駄にしないでください。より明確で理解しやすいと思われる方を書きます。
編集:おまけとして、現在、私はコンテナー反復の C++11 バージョンを強く支持しています。これは、クリーンで簡潔でシンプルです。
for(QString &s : Con) {
// you code here
}