Última atualização:2026-10-12
resize e reserve em vector de C++¶
Em C++, resize e reserve são duas funções membro de contêineres (por exemplo std::vector), usadas para gerenciar o tamanho do vector e a alocação de memória.
Por exemplo:
std::vector<int> v1;
v1.resize(1000); //allocation + instance creation
cout <<(v1.size() == 1000)<< endl; //prints 1
cout <<(v1.capacity()==1000)<< endl; //prints 1
std::vector<int> v2;
v2.reserve(1000); //only allocation
cout <<(v2.size() == 1000)<< endl; //prints 0
cout <<(v2.capacity()==1000)<< endl; //prints 1
A função resize é usada para alterar o tamanho do contêiner, podendo aumentar ou reduzir o número de elementos. Quando o tamanho do contêiner é aumentado, os novos elementos adicionados são inicializados. Quando o tamanho é reduzido, os elementos que excedem o novo tamanho são removidos.
A função reserve é usada para pré-alocar o espaço de memória do contêiner, sem alterar o seu tamanho. Ela pode ser usada para alocar memória suficiente com antecedência, evitando realocações frequentes de memória e melhorando o desempenho. No entanto, chamar reserve não altera o tamanho do contêiner; apenas aloca espaço de memória suficiente para ele.
Vale observar que a disponibilidade das funções resize e reserve varia conforme o tipo de contêiner. A função resize está disponível para a maioria dos tipos de contêiner, enquanto a função reserve só é válida para contêineres de tamanho dinâmico, como std::vector e std::deque. Para contêineres de tamanho fixo (como std::array), chamar reserve não tem qualquer efeito.
Do ponto de vista do código-fonte:
void resize(size_type new_size, value_type value = value_type()) {
if (new_size < size()) {
erase(begin() + new_size, end()); // 移除超出新大小的元素
} else {
insert(end(), new_size - size(), value); // 添加新元素
}
}
void reserve(size_type _n) {
if (__n > max_size())
__throw_length_error(__N("vector::reserve"));
if (capacity() < __n)
_M_reallocate(__n);
}
Fim desta seção
Tópicos relacionados¶
- Funções virtuais puras e classes abstratas em C++ | C++那些事
- Asserções com assert em C++ | C++那些事
- Bit fields em C++ | C++那些事
- Implementando polimorfismo de C++ em linguagem C | C++那些事
- Constantes e modificadores com const em C++ | C++那些事
- A família completa do const em C++ | C++那些事
- O operador de desreferência * em C++ | C++那些事
- Inicialização e atribuição em C++ | C++那些事
- Formas de retornar múltiplos valores em C++ | C++那些事
- A palavra-chave mutable em C++ | C++那些事