Beh, gli studenti della mia classe sembrano incapaci di spiegarmi quando è più efficace usare i vettori, ma sembrano abbastanza felici quando mi consigliano di usare le liste.
Ecco come lo capisco
Elenchi : ogni articolo contiene un indirizzo per l'elemento successivo o precedente, quindi con questa funzione è possibile randomizzare gli articoli, anche se non sono ordinati, l'ordine non cambierà: è efficace se la memoria è frammentata. Ma ha anche un altro grande vantaggio: puoi facilmente inserire / rimuovere elementi, perché l'unica cosa che devi fare è cambiare alcuni puntatori. Svantaggio: per leggere un singolo elemento casuale, devi saltare da un elemento all'altro fino a trovare l'indirizzo corretto.
Vettori : quando si usano i vettori, la memoria è molto più organizzata come normali matrici: ogni n-esimo elemento viene archiviato subito dopo (n-1) e prima (n + 1). Perché è meglio dell'elenco? Perché consente un accesso casuale rapido. Ecco come: se conosci la dimensione di un elemento in un vettore e se sono contigui in memoria, puoi facilmente prevedere dove si trova l'ennesimo elemento; non devi sfogliare tutti gli elementi di un elenco per leggere quello che desideri, con il vettore, lo leggi direttamente, con un elenco che non puoi. D'altra parte, modificare l'array vettoriale o cambiare un valore è molto più lento.
Gli elenchi sono più appropriati per tenere traccia degli oggetti che possono essere aggiunti / rimossi in memoria. I vettori sono più appropriati quando si desidera accedere a un elemento da una grande quantità di singoli elementi.
Non so come siano ottimizzati gli elenchi, ma devi sapere che se vuoi un accesso in lettura veloce, dovresti usare i vettori, perché quanto sono buoni gli elenchi STL, non sarà così veloce in accesso in lettura rispetto al vettore.