実際、標準では何が起こるべきかを指定しています。
これは からvectorのものですが、テーマはすべてのコンテナ ( list、deque、など...)で同じです。
23.2.4.2 ベクトル容量 [lib.vector.capacity]
void resize(size_type sz, T c = T());
6) 効果:
if (sz > size())
insert(end(), sz-size(), c);
else if (sz < size())
erase(begin()+sz, end());
else
; //do nothing
つまり、指定されたサイズresizeが要素の数よりも小さい場合、それらの要素はコンテナーから消去されます。に関してcapacity()は、これは何をするかによって異なりerase()ます。
clear()標準で見つけることはできませんが、次のように定義されていると確信しています。
void clear()
{
erase(begin(), end());
}
したがって、それに対する効果clear()は、それcapacity()に対する効果にも結び付けられerase()ます。標準によると:
23.2.4.3 ベクトル修飾子 [lib.vector.modifiers]
iterator erase(iterator position);
iterator erase(iterator first, iterator last);
4) 複雑さ: T のデストラクタは、消去された要素の数に等しい回数呼び出されます....
これは、要素が破壊されることを意味しますが、メモリはそのまま残ります。erase()は容量に影響しないためresize()、clear()も影響もありません。