Qt boucle foreach de commande vs pour la boucle pour QList

lors de l'itération à travers un QList<T> avec un foreach boucle, dans les tests que j'ai effectué les articles sont retournés dans le même ordre qu'ils sont avec un standard for boucle.

ma question Est, est-ce que le foreach toujours retourner les articles dans l'ordre numérique par index comme ceci, pour les conteneurs qui ont un ordre naturel (comme QList et QVector)? Par exemple, sont les suivantes toujours équivalent?

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";
}
18
demandé sur Freedom_Ben 2013-05-30 03:05:30

2 réponses

foreach macro (alias. Q_FOREACH) utilise le begin() et end() méthodes de requête iterator du conteneur.

donc si votre conteneur est un QList ou QVector alors vos exemples seront toujours équivalents. Vous pouvez consulter le foreach code source ici.

foreach macro n'est pas si grande, il rend une copie du conteneur - utilisez donc seulement sur les conteneurs qui prennent en charge implicite de partage. Utiliser C++11 for( : ) {} boucles si disponibles, sinon Boost a un équivalent qui est de qualité supérieure.

29
répondu cmannett85 2013-05-30 07:41:38

basé sur les informations trouvées ici,foreach est beaucoup plus lente que la première, ce qui suggère qu'il n'est pas équivalent.

3
répondu Krozark 2016-07-27 08:16:32