std::vector resize downward
c++, resize, std, stdvector, vector
Solution
Calling `resize()` with a smaller size has no effect on the capacity of a `vector`. It will not free memory.
The standard idiom for freeing memory from a `vector` is to `swap()` it with an empty temporary `vector`: `std::vector<T>().swap(vec);`. If you want to resize downwards you'd need to copy from your original vector into a new local temporary vector and then swap the resulting vector with your original.
Updated: C++11 added a member function `shrink_to_fit()` for this purpose, it's a non-binding request to reduce `capacity()` to `size()`.
Problem
The C++ standard seems to make no statement regarding side-effects on capacity by either `resize(n)`, with `n < size()`, or `clear()`. It does make a statement about amortized cost of `push_back` and `pop_back` - O(1) I can envision an implementation that does the usual sort of capacity changes ala CLRS Algorithms (e.g. double when enlarging, halve when decreasing `size to < capacity()/4`). (Cormen Lieserson Rivest Stein) Does anyone have a reference for any implementation restrictions?