¿Debo usar deque en lugar de vector si quisiera insertar elementos también en el inicio del contenedor? ¿Cuándo debería usar la lista y de qué sirve?Contenedores STL: diferencia entre vector, lista y deque
Respuesta
Utilice deque
si necesita una inserción/extracción eficiente al principio y al final de la secuencia y acceso aleatorio; use list
si necesita una inserción eficiente en cualquier lugar, sacrificando el acceso aleatorio. Los iteradores y las referencias a los elementos list
son muy estables en casi cualquier mutación del contenedor, mientras que deque
tiene normas de invalidación de referencia e iterador muy peculiares (por lo tanto, pruébelos cuidadosamente).
También, list
es un contenedor basado en nodos, mientras que deque
utiliza fragmentos de memoria contigua, por lo que la localidad de memoria puede tener efectos de rendimiento que no se pueden capturar mediante estimaciones de complejidad asintótica.
deque
puede servir como un reemplazo para vector
en casi todas partes y probablemente debería haber sido considerado el contenedor "predeterminado" en C++ (debido a sus requisitos de memoria más flexibles); la única razón para preferir vector
es cuando debe tener un diseño de memoria contigua garantizado de su secuencia.
deque
y vector
proporcionan acceso aleatorio, list
proporciona solo accesos lineales. Entonces, si necesita poder hacer el contenedor [i], eso excluye list
. Por otro lado, puede insertar y eliminar elementos en cualquier lugar en un list
de manera eficiente, y las operaciones en el medio de vector
y deque
son lentas.
deque
y vector
son muy similares, y son básicamente intercambiables para la mayoría de los propósitos. Solo hay dos diferencias que vale la pena mencionar. Primero, vector
solo puede agregar nuevos elementos de manera eficiente al final, mientras que deque
puede agregar elementos en cada extremo de manera eficiente. Entonces, ¿por qué alguna vez usarías un vector
? A diferencia de deque
, vector
garantiza que todos los elementos se almacenarán en ubicaciones de memoria contigua, lo que hace que la iteración a través de ellos sea más rápida en algunas situaciones.
- 1. const y STL contenedores
- 2. equivalente Python para C++ STL contenedores vector/Lista
- 3. Estructuras de datos equivalentes de contenedores STL
- 4. Contenedores OpenCV, Matlab y STL
- 5. Asignación entre los contenedores stl C++ y C#
- 6. STL asignación de contenedores y punteros const
- 7. Compatibilidad binaria de contenedores STL
- 8. ¿Cuál es la diferencia entre std :: set y std :: vector?
- 9. const y no const en contenedores STL
- 10. Complejidad de STL deque :: insert()
- 11. OpenMP y STL vector
- 12. Diferencia entre Lista y matriz
- 13. Inspeccionando contenedores STL en XCode
- 14. C++ STL :: ¿cuál es la diferencia entre inplace_merge y sort
- 15. contenedores STL en la pila y el montón
- 16. iteración de contenedores STL encapsulados encapsulados
- 17. ¿Transferir la propiedad dentro de contenedores STL?
- 18. Comportamiento diferente entre estándar deque/vector en MSVCC/g ++/icc
- 19. ¿Cómo copian los objetos STL los contenedores?
- 20. Encabezados hacia adelante para contenedores STL
- 21. Depuración de contenedores C++ STL en Windbg
- 22. lambda + for_each + eliminar en contenedores STL
- 23. Diferencia entre Lista y IList
- 24. vector vs inserción deque en medio
- 25. La diferencia entre front() y begin()
- 26. Vector de STL y seguridad de hilo
- 27. cuál es la diferencia entre mapa y hashmap en STL
- 28. ¿Cuándo tiene sentido utilizar unique_ptr con contenedores STL? (C++ 11)
- 29. ¿Cómo pasar contenedores STL como argumentos a BOOST_CHECK_EQUAL?
- 30. vector STL frente a borrado de mapa
'vector' casi siempre funciona mejor que' deque', en mi experiencia. –
@DonReba: depende del caso de uso, y la creación de perfiles es realmente la única respuesta. Un vector puede tener dificultades si desea asignar un rango enorme, mientras que el deque puede asignar nuevos fragmentos sin mover los antiguos. Y, por supuesto, depende de lo que estés haciendo. –