Esto puede parecer frívolo para algunos de ustedes, pero ¿cuál de los siguientes 2 métodos de iteración sobre un contenedor STL es mejor? ¿Por qué?C++ STL: ¿Qué método de iteración sobre un contenedor STL es mejor?
class Elem;
typedef vector<Elem> ElemVec;
ElemVec elemVec;
// Method 0
for (ElemVec::iterator i = elemVec.begin(); i != elemVec.end(); ++i)
{
Elem& e = *i;
// Do something
}
// Method 1
for (int i = 0; i < elemVec.size(); ++i)
{
Elem& e = elemVec.at(i);
// Do something
}
El método 0 parece más limpio STL, pero el Método 1 logra lo mismo con un código menor. La iteración simple sobre un contenedor es lo que aparece all sobre el lugar en cualquier código fuente. Por lo tanto, me inclino por elegir el Método 1, que parece reducir el desorden visual y el tamaño del código.
PD: Sé que los iteradores pueden hacer mucho más que un simple índice. Pero, por favor, mantenga la respuesta/discusión centrada en la iteración simple sobre un contenedor como se muestra arriba.
Gracias Neil. Mi código no suele funcionar con plantillas, sino vectores cuyo tipo se conoce. ¿Podría explicar por qué el Método 0 es más eficiente en su respuesta? –
Puede ser ligeramente más eficiente si el iterador se implementa realmente directamente como un puntero. Tenga en cuenta el uso de las palabras "puede" y "levemente" - necesita medir para estar seguro. –
Sí, de hecho el iterador no es más que un puntero para la mayoría de los contenedores. Pero, ¿cómo hace eso que el código sea más rápido? AFAIK incluso el Método 1 termina siendo una aritmética de puntero, ¿no es así? –