Junior
¿En qué consiste la diferencia entre los contenedores vector y list en C++?
sobes.tech AI
Respuesta de la IA
std::vector representa un array dinámico. Los datos se almacenan en un bloque de memoria contiguo.
Ventajas de vector:
- Acceso rápido por índice (O(1)).
- Buena localidad de datos, útil para la caché del procesador.
- Inserción/eliminación rápida al final (en promedio O(1)).
Desventajas de vector:
- Complejidad en inserciones/eliminaciones en lugares arbitrarios (O(n)).
- Reasignación de memoria al crecer, que requiere copiar elementos.
std::list es una lista doblemente enlazada. Cada elemento almacena punteros al elemento anterior y al siguiente.
Ventajas de list:
- Complejidad en inserciones/eliminaciones en cualquier lugar (O(1)) después de encontrar la posición (que puede ser O(n)).
- No requiere un bloque de memoria contiguo.
Desventajas de list:
- Acceso lento por índice (O(n)).
- Ocupa más memoria por elemento (debido a los punteros).
- Mala localidad de datos.
Diferencia principal:
| Característica | std::vector |
std::list |
|---|---|---|
| Estructura de datos | Array dinámico | Lista doblemente enlazada |
| Almacenamiento de datos | Memoria contigua | Nodos con punteros |
| Acceso por índice | O(1) | O(n) |
| Inserción/eliminación | O(n) (excepto al final) | O(1) (después del iterador) |
| Localidad | Buena | Mala |
| Uso de memoria | Elementos | Elementos + punteros |
La elección entre vector y list depende de las operaciones típicas con el contenedor. Si son frecuentes el acceso aleatorio y la inserción/eliminación al final, es preferible vector. Si son importantes las inserciones/eliminaciones frecuentes en medio de la lista, es preferible list.