¿Qué ventajas hay en el acceso a elementos vectoriales usando un iterador frente a un índice?¿Cuál es la diferencia entre acceder a elementos vectoriales usando un iterador frente a un índice?
¿Cuál es la diferencia entre acceder a elementos vectoriales usando un iterador frente a un índice?
Respuesta
¿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.
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. –
Siempre que necesite acceso secuencial, tiene razón. En otros casos, no hay uniformidad. – xtofl
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.
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.
¿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
Esto no es lo que digo, solo me referí al aspecto del rendimiento. –
+1 Aunque la pregunta era acerca de las ventajas con los iteradores. Pero los iteradores SI causan gastos generales. Y es muy notable. – ralphtheninja
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)
- 1. ¿Cuál es la diferencia entre iniciar un enlace de servidor a 0.0.0.0 frente a 127.0.0.1?
- 2. Cuál es la diferencia entre 'índice' e 'índice de lista'
- 3. iterador frente a referencia frente a puntero
- 4. ¿Cuál es la diferencia entre un índice de tabla y un índice de vista?
- 5. ¿Cuál es la diferencia entre acceder a un método de clase vía -> y via ::?
- 6. Iterador externo frente a iterador interno
- 7. ¿Cuál es la diferencia entre un predicado y un funcionador?
- 8. En una base de datos, ¿cuál es la diferencia entre una clave y un índice?
- 9. Enlace tardío frente a polimorfismo: ¿cuál es la diferencia?
- 10. Diferencia entre reclamos frente a OAuth
- 11. ¿Cuál es la diferencia entre un iterador de pase único de Boost y un iterador de recorrido hacia adelante?
- 12. ¿Cuál es la diferencia entre declarar un filtro de intención en una actividad frente a un receptor?
- 13. Diferencia entre acceder a los elementos de celda usando llaves y paréntesis
- 14. ¿Cuál es la diferencia entre a [:] = b y a = b [:]
- 15. ¿Cuál es la diferencia entre $ a y $$ a en php?
- 16. ¿Cómo saber la diferencia entre un iterador y un iterable?
- 17. ¿Cuál es la diferencia entre un controlador y un servicio?
- 18. ¿Cuál es la diferencia entre un JavaBean y un POJO?
- 19. C++ Accediendo a los elementos vectoriales
- 20. Usando. o [] para acceder a las propiedades del objeto: ¿cuál es la diferencia?
- 21. ¿Cuál es la diferencia entre un árbol y un directorio?
- 22. ¿Cuál es la diferencia entre un "nonce" y un "GUID"?
- 23. en C++, ¿cuál es la diferencia entre un objeto y un puntero a un objeto?
- 24. ¿Cuál es la diferencia entre un HashMap y un TreeMap?
- 25. ¿Cuál es la diferencia entre un algoritmo y un método
- 26. ¿Cuál es la diferencia entre un vector y un vértice?
- 27. ¿Cuál es la diferencia entre un IORef y un MVar?
- 28. ¿Cuál es la diferencia entre un lenguaje orientado a componentes y orientado a objetos?
- 29. ¿Cuál es la diferencia entre un método y un selector?
- 30. Cuál es la diferencia entre un subproceso y un controlador
Diferenciar entre acceder a 'todos los elementos en orden' (es decir iterar) y acceder a 'un elemento aleatorio' (es decir, acceder). – xtofl