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?
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()
.