As duas funções fazem coisas muito diferentes!
O resize()
método (e a passagem do argumento para o construtor é equivalente a isso) inserirá ou excluirá o número apropriado de elementos no vetor para torná-lo determinado tamanho (ele possui um segundo argumento opcional para especificar seu valor). Isso afetará a size()
iteração sobre todos esses elementos, o push_back será inserido depois deles e você poderá acessá-los diretamente usando o operator[]
.
O reserve()
método apenas aloca memória, mas a deixa não inicializada. Isso afeta apenas capacity()
, mas size()
será inalterado. Não há valor para os objetos, porque nada é adicionado ao vetor. Se você inserir os elementos, nenhuma realocação acontecerá, porque foi feita com antecedência, mas esse é o único efeito.
Então depende do que você quer. Se você deseja uma matriz de 1000 itens padrão, use resize()
. Se você deseja uma matriz na qual deseja inserir 1000 itens e evitar algumas alocações, use reserve()
.
EDIT: O comentário de Blastfurnace me fez ler a pergunta novamente e perceber que, no seu caso, a resposta correta é não pré-alocar manualmente. Continue inserindo os elementos no final conforme necessário. O vetor será realocado automaticamente conforme necessário e o fará com mais eficiência do que a maneira manual mencionada. O único caso em que reserve()
faz sentido é quando você tem uma estimativa razoavelmente precisa do tamanho total que precisará facilmente disponível com antecedência.
EDIT2: Edição da pergunta do anúncio: se você tiver uma estimativa inicial, reserve()
essa estimativa. Se isso não for suficiente, deixe o vetor fazer a coisa certa.
std::vector
.