Si dice che l'iterazione attraverso un vettore (come nella lettura di tutto il suo elemento) sia più veloce dell'iterazione di un elenco, a causa della cache ottimizzata.std :: list vs std :: vector iteration
Esiste qualche risorsa sul Web che quantifica quanto influisce sulle prestazioni?
Inoltre, sarebbe meglio utilizzare un elenco personalizzato collegato, quali elementi sarebbero preallocati in modo che siano consecutivi in memoria?
L'idea alla base di questo è che voglio memorizzare elementi in un certo ordine che non cambierà. Devo ancora essere in grado di inserire alcuni in fase di esecuzione nella midle velocemente, ma la maggior parte di essi sarà ancora consecutiva, perché l'ordine non cambierà.
Il fatto che gli elementi siano consecutivi hanno un impatto nella cache o perché chiamerò ancora list_element->next
anziché ++list_element
ma non migliora nulla?
"Inoltre, sarebbe meglio utilizzare un elenco personalizzato collegato, quali elementi sarebbero preallocati in modo che siano consecutivi in memoria?" intendi un vettore? –
@LuchianGrigore Non sarebbe un vettore, visto che, se si desidera inserire un elemento nel mezzo, tutto ciò che si dovrebbe fare sarebbe ancora cambiare alcuni puntatori. –
Il requisito principale per 'std :: list' è che l'inserimento e la rimozione di singoli elementi da qualsiasi punto della lista sia costante. Questo è incompatibile con l'avere elementi consecutivi in memoria. – juanchopanza