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.