実際、標準では何が起こるべきかを指定しています。
これは から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()
も影響もありません。