Cela n'a vraiment pas d'importance. . Il est probable que si votre programme est lent, ce n'est pas le problème. Cependant, il faut noter que vous ne faites pas une comparaison complètement égale. Qt foreach
est plus similaire à ceci (cet exemple utilisera QList<QString>
) :
for(QList<QString>::iterator it = Con.begin(); it != Con.end(); ++it) {
QString &str = *it;
// your code here
}
La macro est en mesure de le faire en utilisant certaines extensions du compilateur (comme l'extension de GCC __typeof__
) pour obtenir le type du conteneur passé. Imaginez également que la fonction BOOST_FOREACH
est un concept très similaire.
La raison pour laquelle votre exemple n'est pas juste est que votre version non-Qt ajoute du travail supplémentaire.
Vous indexez au lieu d'itérer réellement. Si vous utilisez un type dont l'allocation n'est pas contiguë (je soupçonne que c'est le cas avec le type QList<>
), l'indexation sera plus coûteuse car le code doit calculer "où" se trouve le n-ième élément.
Ceci étant dit. C'est toujours n'a pas d'importance. La différence de temps entre ces deux morceaux de code sera négligeable, voire inexistante. Ne perdez pas votre temps à vous en inquiéter. Écrivez ce qui vous semble le plus clair et le plus compréhensible.
EDITAR: En prime, actuellement, je favorise fortement la version C++11 de l'itération des conteneurs, elle est propre, concise et simple :
for(QString &s : Con) {
// you code here
}
7 votes
Une remarque rapide : si vous ne prévoyez pas de modifier la variable de la boucle foreach, vous devriez utiliser une const QString& à la place - cela a également des implications sur la vitesse.
0 votes
Voici une explication de la raison pour laquelle vous devez faire attention à inclure la const : labs.qt.nokia.com/2009/01/23/iterating-efficiently
1 votes
Le complément important à cette question est que vous ne devez jamais utiliser Qt
foreach
pour les conteneurs non Qt, il est fort probable qu'une copie profonde sera effectuée et c'est ce que vous ne voulez pas, même sans le profiler au préalable.2 votes
Depuis Qt 5.7, le
foreach
est dépréciée, voir ma réponse ci-dessous pour plus de détails.