Se dice que iterar a través de un vector (como al leer todo su elemento) es más rápido que iterar a través de una lista, debido a la memoria caché optimizada.std :: list vs std :: vector iteration
¿Hay algún recurso en la web que pueda cuantificar cuánto afecta el rendimiento?
Además, ¿sería mejor utilizar una lista vinculada personalizada, a quién se asignarían elementos para que sean consecutivos en la memoria?
La idea detrás de eso es que quiero almacenar elementos en un orden determinado que no cambiará. Todavía necesito poder insertar algunos en tiempo de ejecución en el medio rápidamente, pero la mayoría de ellos seguirán siendo consecutivos, porque el orden no cambiará.
El hecho de que los elementos sean consecutivos tiene un impacto en la memoria caché, o porque todavía llamaré al list_element->next
en lugar de a ++list_element
, no mejora nada?
"Además, ¿sería mejor utilizar una lista vinculada personalizada, a quién se asignarán elementos para que sean consecutivos en la memoria?" te refieres a un vector? –
@LuchianGrigore No sería tan como un vector ya que, si quisiera insertar un elemento en el medio, todo lo que tendría que hacer sería cambiar algunos punteros. –
El requisito principal para 'std :: list' es que la inserción y eliminación de elementos individuales de cualquier lugar en la lista sea de tiempo constante. Esto es incompatible con tener elementos consecutivos en la memoria. – juanchopanza