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.