C++ Ridurre la capacità di un vettore


Esempio

Un std::vector aumenta automaticamente la sua capacità al momento dell'inserimento, ma non riduce mai la sua capacità dopo la rimozione degli elementi.

// Initialize a vector with 100 elements
std::vector<int> v(100);

// The vector's capacity is always at least as large as its size
auto const old_capacity = v.capacity();
// old_capacity >= 100

// Remove half of the elements
v.erase(v.begin() + 50, v.end());  // Reduces the size from 100 to 50 (v.size() == 50),
                                   // but not the capacity (v.capacity() == old_capacity)

Per ridurre la sua capacità, possiamo copiare il contenuto di un vettore in un nuovo vettore temporaneo. Il nuovo vettore avrà la capacità minima necessaria per memorizzare tutti gli elementi del vettore originale. Se la riduzione delle dimensioni del vettore originale era significativa, è probabile che la riduzione della capacità per il nuovo vettore sia significativa. Possiamo quindi scambiare il vettore originale con quello temporaneo per mantenere la sua capacità minima:

std::vector<int>(v).swap(v);
C ++ 11

In C ++ 11 possiamo usare la funzione membro shrink_to_fit() per un effetto simile:

v.shrink_to_fit();

Nota: la funzione membro shrink_to_fit() è una richiesta e non garantisce la riduzione della capacità.