Actually, the standard does specify what should happen:
This is from vector
, but the theme is the same for all the containers (list
, deque
, etc...)
23.2.4.2 vector capacity [lib.vector.capacity]
void resize(size_type sz, T c = T());
6) Effects:
if (sz > size())
insert(end(), sz-size(), c);
else if (sz < size())
erase(begin()+sz, end());
else
; //do nothing
That is to say: If the size specified to resize
is less than the number of elements, those elements will be erased from the container. Regarding capacity()
, this depends on what erase()
does to it.
I cannot locate it in the standard, but I'm pretty sure clear()
is defined to be:
void clear()
{
erase(begin(), end());
}
Therefore, the effects clear()
has on capacity()
is also tied to the effects erase()
has on it. According to the standard:
23.2.4.3 vector modifiers [lib.vector.modifiers]
iterator erase(iterator position);
iterator erase(iterator first, iterator last);
4) Complexity: The destructor of T is called the number of times equal to the number of the elements erased....
This means that the elements will be destructed, but the memory will remain intact. erase()
has no effect on capacity, therefore resize()
and clear()
also have no effect.