Vector: Vector es un tipo de array dinámica que tiene la capacidad de cambiar el tamaño automáticamente después de la inserción o eliminación de elementos. Los elementos en vector se colocan en almacenamiento contiguo para que se pueda acceder a ellos y recorrerlos mediante iteradores. El elemento se inserta al final del vector.
Ejemplo:
vector v; v.insert(5); v.delete();
Lista: la lista es una secuencia de doble enlace que admite el recorrido hacia adelante y hacia atrás. El tiempo de inserción y borrado en el principio, final y medio es constante. Tiene la memoria no contigua y no hay memoria preasignada.
Ejemplo:
list l; l.insert_begin(5); l.delete_end();
A continuación se muestra una tabla de diferencias entre Vector y Lista:
Vector | Lista |
---|---|
Tiene memoria contigua. | Si bien tiene memoria no contigua. |
Está sincronizado. | Si bien no está sincronizado. |
El vector puede tener un tamaño predeterminado. | La lista no tiene un tamaño predeterminado. |
En vector, cada elemento solo requiere el espacio para sí mismo. | En la lista, cada elemento requiere espacio adicional para el Node que contiene el elemento, incluidos los punteros a los elementos siguientes y anteriores de la lista. |
La inserción al final requiere un tiempo constante, pero la inserción en otro lugar es costosa. | La inserción es barata sin importar en qué parte de la lista ocurra. |
Vector es seguro para subprocesos. | La lista no es segura para subprocesos. |
La eliminación al final del vector necesita un tiempo constante pero para el resto es O(n). | La eliminación es barata sin importar en qué parte de la lista ocurra. |
Es posible el acceso aleatorio de los elementos. | El acceso aleatorio de los elementos no es posible. |
Los iteradores dejan de ser válidos si se agregan o eliminan elementos del vector. | Los iteradores son válidos si se agregan o eliminan elementos de la lista. |