実際には、標準ではどうするかを指定しない:
これは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。これは、要素を意味Tのデストラクタが消去された要素の数に等しい回数と呼ばれる....
:修飾子]
iterator erase(iterator position);
iterator erase(iterator first, iterator last);
4)複雑破壊されますが、メモリは元のままです。 erase()
は容量に影響を与えません。したがって、resize()
とclear()
も効果がありません。
私はそれを読んで、彼はメモリ使用量への影響を尋ねています。彼は具体的に容量の影響がどのようなものかを尋ねています。その基準はその場合の結果を指定するものではありませんが、私が考えることができる唯一の理由は、未使用のメモリを解放するという希望です。一時的なやりとりを伴うスワップは、それを達成するための慣習的な方法です。 – mattnewport
標準では、これらの操作のcapacity()の減少を指定しないことで結果を指定しています。したがって、それを減らすことはできません。 – MSalters
初期の「構築」段階の後にメモリの割り当てや解放を禁止する環境があります。この環境では、操作中にメモリの割り当てや解放を行わないことが保証されている限り、ベクターを使用できます。だから、この質問はこの状況に関連している(私をここに連れて来た)。 – meowsqueak