2009-05-28 11 views

Respuesta

8

¿Por qué son mejores que los índices iteradores?

  • En los casos en que el índice no está disponible (como con std :: list, para ejemplo).
  • En el caso en el que una función genérica aceptar un iterador se llama.
  • Al escribir una plantilla de función que se supone que funciona con más de un tipo de contenedor.
  • Existen para crear uniformidad entre todos los contenedores y capacidad de utilizar iteradores todos los recipientes así como punteros regulares en todas las algoritmos estándar.
  • Los iteradores pueden señalar secuencias que no existen, excepto como concepto. Por ejemplo, puede crear una clase de iterador que pase por los números primos sin tener que crear realmente un contenedor de primos.

Sin embargo, si ignorando los tipos de envases que no son compatibles acceso aleatorio (lista, juego, etc.), iteradores todavía ofrecen

  • puntero como la semántica (piensa en cadena :: iterador vs char *)
  • concepto generalizado utilizable más allá de iteración sobre elementos dentro de un contenedor .
  • Mejor rendimiento que funciones de miembro de contenedor en algunos casos.
+3

Estoy de acuerdo y, en particular, pondría el acento en una ventaja muy práctica: pasar cíclicamente por los elementos de un vector utilizando iteradores es un error seguro para las situaciones fuera de tiempo. Más simplemente, usar iteradores para vectores es de alguna manera independiente del tamaño. –

+0

Siempre que necesite acceso secuencial, tiene razón. En otros casos, no hay uniformidad. – xtofl

4

La modularidad es la respuesta. Supongamos que envuelve su lógica en una llamada a función (una buena práctica). En ese caso, hacer que reciba el iterador lo hará genérico, para que pueda operar en una matriz de estilo C (puntero), un vector stl C++ o cualquier cosa que realmente se comporte como un contenedor iterador, como una lista vinculada, por ejemplo.

1

Hace poco me pregunté sobre el rendimiento. Es posible que desee echar un vistazo a las respuestas que obtuve.

Comprobar el siguiente enlace: Iterators vs. indexes

la discusión fue sobre todo por el rendimiento, la cual resultó ser dependiente de la plataforma, con cambios menores en cada plataforma.

+0

¿Diría entonces que las ventajas de los iteradores es su funcionamiento similar a un puntero con los pocos métodos con los que cuenta? – Babiker

+0

Esto no es lo que digo, solo me referí al aspecto del rendimiento. –

+1

+1 Aunque la pregunta era acerca de las ventajas con los iteradores. Pero los iteradores SI causan gastos generales. Y es muy notable. – ralphtheninja

3

me dicen que su portabilidad a través de contenedores.

Si escribe un código usando vectores y usa el índice para repetir, entonces el código no podrá cambiarse a otros contenedores fácilmente más tarde.

typedef std::vector<int> myContainer; //only change here for std::list 

for (myContainer::iterator iter = actualContainer.begin(); 
     iter != actualContainer.end(); 
     ++iter) 
{} 

En el código anterior, si desea cambiar a partir del vector a la lista, es muy fácilmente posible. Si utilizó el índice, entonces no será posible.

De lo contrario, dado que el vector utiliza iteradores de acceso aleatorio, debería ser el mismo.(cualquier elemento de índice o iterador está bien)

Cuestiones relacionadas