Biblioteca de vetores C ++ - função reserve ()
Descrição
A função C ++ std::vector::reserve()as solicitações para reservar a capacidade do vetor sejam pelo menos o suficiente para conter n elementos. A realocação ocorre se houver necessidade de mais espaço.
Declaração
A seguir está a declaração para o cabeçalho da função std :: vector :: reserve () std :: vector.
C ++ 98
void reserve (size_type n);
Parâmetros
n - Capacidade mínima para vetor.
Valor de retorno
Nenhum
Complexidade de tempo
Se a realocação acontecer, então a complexidade do tempo é linear, ou seja, O (n).
Exemplo
O exemplo a seguir mostra o uso da função std :: vector :: reserve ().
No exemplo abaixo, o tamanho inicial do vetor v1 é zero. Após inserir o primeiro elemento, o vetor é expandido e sua capacidade passa a ser 1, após inserir o próximo elemento sua capacidade passa a ser 2 e assim por diante. O vetor aumenta sua capacidade em potência de dois, conforme necessário.
Para o vetor v2 , estamos reservando capacidade para conter 25 elementos, por isso, assim que o primeiro elemento é inserido, a capacidade do vetor passa a ser 25.
#include <iostream>
#include <vector>
using namespace std;
int main(void) {
vector<int> v1;
vector<int> v2;
ssize_t size;
size = v1.capacity();
for (int i = 0; i < 25; ++i) {
v1.push_back(i);
if (size != v1.capacity()) {
size = v1.capacity();
cout << "Expanding vector v1 to hold " << size
<< " elements" << endl;
}
}
cout << endl << endl;
/* Reserve space for 25 elements */
v2.reserve(25);
for (int i = 0; i < 25; ++i) {
v2.push_back(i);
if (size != v2.capacity()) {
size = v2.capacity();
cout << "Expanding vector v2 to hold " << size
<< " elements" << endl;
}
}
return 0;
}
Vamos compilar e executar o programa acima, isso produzirá o seguinte resultado -
Expanding vector v1 to hold 1 elements
Expanding vector v1 to hold 2 elements
Expanding vector v1 to hold 4 elements
Expanding vector v1 to hold 8 elements
Expanding vector v1 to hold 16 elements
Expanding vector v1 to hold 32 elements
Expanding vector v2 to hold 25 elements