Sua escolha deve refletir suas necessidades. Todos os elementos dos vetores são contínuos na memória e as listas têm ponteiros para os elementos seguintes / anteriores, para que cada um tenha suas vantagens / desvantagens:
Listas:
- Cada elemento leva 2 números inteiros para apontar os elementos anteriores e seguintes, portanto, mais comumente, são 8 bytes a mais para cada elemento da sua lista
- O inserto é linear no tempo: O (n)
- Remover é uma operação constante: O (1)
- Acesse o elemento x é linear no tempo: O (n)
Vetores:
- Precisa de menos memória (sem ponteiros para outros elementos, é um algoritmo matemático simples)
- Remover é linear no tempo: O (n)
- O acesso ao elemento x é constante: O (1) (Isso ocorre porque os elementos são contínuos na memória, por isso é uma operação matemática simples vectorPtr + (x * bytesOfTheType))
- A inserção pode ocorrer em tempo linear, mas, mais comumente, é uma operação constante: O (1) (isso ocorre porque o vetor em uma matriz sempre reserva 2 vezes sua capacidade quando a matriz está cheia, para que a cópia da matriz não seja frequente)
Portanto, a lista é melhor quando o programa precisa adicionar e remover elementos com frequência, mas nunca acesse (ou raramente acesse) um elemento específico sem a necessidade dos outros antes. O vetor deve ser usado para melhorar o tempo de acesso, mas falta eficiência quando você precisa remover ou adicionar elementos.
Verifique esta postagem no stackoverflow, ela apresenta um gráfico muito bom, com perguntas básicas sobre suas necessidades, que o levam a um contêiner específico, dependendo de suas respostas:
/programming/366432/extending-stdlist