Standardowy kontener vector z reguły zaimplementowany jest w taki sposób, aby w minimalizować liczbę wykonywanych realokacji. Z reguły alokuje pamięć na przechowywanie większej liczby elementów niż się w nim znajduje.
Za pomocą metody capacity możemy sprawdzić ile jeszcze elementów wstawić do kontenera vector bez potrzeby jego realokacji. Liczbę wstawionych elementów w vectorze sprawdzamy metodą size.
Niekiedy zdarza się, że po wstawieniu dużej liczby elementów, część z nich usuwamy i zmieniamy rozmiar vectora za pomocą metody resize. W większości implementacji capacity ( pojemność vectora) pozostanie taka sama, a to oznacza, że pamięć pomimo tego, że nieużywana nie zostanie oddana do systemu operacyjnego. Aby mieć pewność, że pamięć zostanie zwolniona należy utworzyć tymczasowy obiekt vector i przekazać do konstruktora kopiującego vector, którego rozmiar chcemy zmniejszyć, wywołać metodę swap vectora tymczasowego podając jako parametr vector, którego rozmiar zmniejszamy. Demonstruje to poniższy kod:
{ vector<int> tmp(test); tmp.swap(test); }
Powyższe linie możemy zastąpić wywołaniem jednoliniowym:
vector<int>(test).swap(test);
A oto przykład kodu demonstrującego w pełni powyżej opisaną technikę:
#include <vector> #include <iostream> #include <ostream> #include <algorithm> #include <iterator> using namespace std; int random(){ static int i = 0; return ++i; } int main(){ const int V_BIG_SIZE = 20; const int V_SMALL_SIZE = 10; vector<int> test; generate_n(back_inserter(test), V_BIG_SIZE, random); copy(test.begin(), test.end(), ostream_iterator<int>(cout, " ")); cout<<"\ncapacity: "<<test.capacity()<<" size: "<<test.size()<<endl; test.resize(V_SMALL_SIZE); cout<<"\ncapacity: "<<test.capacity()<<" size: "<<test.size()<<endl; vector<int>(test).swap(test); cout<<"\ncapacity: "<<test.capacity()<<" size: "<<test.size()<<endl; return 0; }