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