Bem, os alunos da minha turma parecem bastante incapazes de me explicar quando é mais eficaz usar vetores, mas eles parecem muito felizes ao me aconselhar a usar listas.
É assim que eu entendo
Listas : cada item contém um endereço para o elemento seguinte ou anterior; portanto, com esse recurso, você pode randomizar os itens, mesmo que não sejam classificados, a ordem não será alterada: será eficiente se a memória estiver fragmentada. Mas também tem uma outra grande vantagem: você pode inserir / remover itens facilmente, porque a única coisa que você precisa fazer é alterar alguns indicadores. Desvantagem: para ler um item único aleatório, você deve pular de um item para outro até encontrar o endereço correto.
Vetores : ao usar vetores, a memória é muito mais organizada, como matrizes regulares: cada n-ésimo item é armazenado logo após (n-1) ésimo item e antes (n + 1) ésimo item. Por que é melhor que a lista? Porque permite acesso aleatório rápido. Aqui está como: se você conhece o tamanho de um item em um vetor e se eles são contíguos na memória, é possível prever facilmente onde está o n-ésimo item; você não precisa procurar em todos os itens de uma lista para ler o que deseja, com vetor, você o lê diretamente, com uma lista que não pode. Por outro lado, modifique a matriz de vetores ou altere um valor muito mais lento.
As listas são mais apropriadas para rastrear objetos que podem ser adicionados / removidos na memória. Os vetores são mais apropriados quando você deseja acessar um elemento de uma grande quantidade de itens únicos.
Não sei como as listas são otimizadas, mas você deve saber que, se quiser acesso rápido à leitura, use vetores, porque o quão bom o STL prende as listas não será tão rápido no acesso de leitura quanto o vetor.