Lors de l'itération à travers un QList<T>
avec une boucle foreach
, dans les tests que j'ai effectués, les éléments sont retournés dans le même ordre qu'ils le sont avec une boucle standard for
.
Ma question est la suivante: le foreach
renverra-t-il toujours les éléments par ordre numérique par index comme celui-ci, pour les conteneurs qui ont un ordre naturel (comme QList
et QVector
)? Par exemple, les éléments suivants toujours sont-ils équivalents?
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";
}
La macro foreach
(aka. Q_FOREACH
) Utilise les méthodes de demande d'itérateur begin()
et end()
du conteneur.
Donc, si votre conteneur est un QList
ou QVector
, vos exemples seront toujours équivalents. Vous pouvez afficher le code source foreach
ici .
La macro foreach
n'est pas géniale cependant, elle fait une copie du conteneur - donc utilisez-la uniquement sur les conteneurs qui prennent en charge le partage implicite. Utilisez les boucles C++ 11 for( : ) {}
si elles sont disponibles, sinon Boost a un équivalent supérieur.
D'après les informations trouvées ici , foreach
est beaucoup plus lent que le premier, ce qui suggère qu'il n'est pas équivalent.