¿Cuál es la diferencia entre las estructuras de datos de std :: vector y std :: deque?

std: vector funciona utilizando una matriz continua de elementos, a medida que se expande, tiene que copiar y reasignar memoria. Esto ocurre aproximadamente cada vez que duplica su tamaño, por lo que pasar de 16 a 17 elementos significa que debe reasignar suficiente espacio para 32 elementos y luego copiarlo todo.

Un vector es muy rápido para el acceso, especialmente secuencial, ya que eso es ayudado masivamente por el precaché en los procesadores modernos que evita los tiempos muy lentos (comparativamente) del acceso ram vs caché.

Una deque utiliza una especie de lista de vectores, donde cada uno tiene una determinada longitud. Significa que es mucho más rápido quitar, insertar o agregar al frente. Todavía hay una inconsistencia al agregar nuevos elementos, ya que a veces tendrá que asignar nueva memoria, pero no necesitará copiar todo su contenido.

En general, si los datos deben leerse mucho y no eliminarse ni moverse, el vector es el camino a seguir y si necesita usarlo como una cola o si necesita modificarlo, a menudo el camino es deque. De hecho, en las pruebas, deque a menudo supera a las listas vinculadas que fueron diseñadas para esa operación.

La principal diferencia es que no se garantiza que los elementos en std :: dequeue sean contiguos (se pueden dividir en varios fragmentos). Puede imaginar std :: dequeue como una lista std :: de std :: vectores más pequeños.

La ventaja es que la inserción de nuevos elementos en una std :: dequeue es típicamente más eficiente, pero la diferencia se vuelve significativa solo cuando los vectores se vuelven muy grandes.

More Interesting

¿Cuál sería un algoritmo eficiente para ordenar millones de líneas de cadenas / enteros en un archivo?

¿Por qué mi método de generador aleatorio no funciona en Java?

Cómo mejorar si he pasado 10 años aprendiendo programación pero aún no puedo resolver la mayoría de los problemas de algoritmos

¿Se puede demostrar que es imposible volver a un entero inicial mayor que uno si aplica un algoritmo de multiplicar por tres y agregar uno cuando es impar y dividir por dos si es par?

Algoritmo: ¿Cómo debo comenzar el estudio de algoritmos?

¿Dónde debería comenzar si quiero implementar un algoritmo de detección de movimiento en FPGA?

Solo conozco algunos conceptos básicos de c ++. ¿Qué libros o tutoriales debo consultar para resolver problemas en spoj y codechef?

¿Cómo funciona el algoritmo OKCupid?

En el algoritmo de Mo, ¿por qué clasificamos las consultas primero en función del número de bloque y luego (si hay un empate) en función del punto final derecho? ¿Cuál es la intuición detrás de esto?

¿Qué algoritmos de máquina requieren escala / normalización de datos?

¿Por qué no puede haber un algoritmo de clasificación que tenga el mejor y el peor caso de N tiempo de ejecución (por ejemplo, lineal)?

¿Qué patrones de diseño y algoritmos comunes necesito saber para el desarrollo de Android?

¿Cuáles son las mejores rutinas que podemos adoptar para ser buenos en la programación / diseño de algoritmos?

¿Cuáles son las mejores estructuras de datos y algoritmos de entrenamiento en kolkata durante 2 meses?

¿Cómo entiende Quora la relevancia entre los feeds?