c++ qt for-loop foreach qt4

c++ - Qt foreach loop ordering versus for loop para QList



for-loop qt4 (2)

Al iterar a través de una QList<T> con un ciclo foreach , en las pruebas que realicé, los elementos se devuelven en el mismo orden que con un ciclo for .

Mi pregunta es, ¿el foreach siempre devolverá los artículos en orden numérico por índice como este, para los contenedores que tienen un orden natural (como QList y QVector )? Por ejemplo, ¿los siguientes son siempre equivalentes?

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 (también conocida como Q_FOREACH ) utiliza los métodos de solicitud de iterador begin() y end() del contenedor.

Entonces, si su contenedor es un QList o QVector , sus ejemplos siempre serán equivalentes. Puede ver el código fuente de foreach aquí .

Sin embargo, la macro foreach no es genial, hace una copia del contenedor, por lo que solo se usa en contenedores que admitan el uso compartido implícito. Utilice C ++ 11 for( : ) {} bucles for( : ) {} si están disponibles, de lo contrario Boost tiene un equivalente que es superior.


Según la información que se encuentra aquí , foreach es mucho más lento que el primero, lo que sugiere que no es equivalente.