1

重複の可能性:
std::vector を縮小するには?

cppreference によると、std::vector::reserve(size_t n) では、n は「割り当てられたストレージの容量として必要な最小量」です。私の質問は次のとおりです。最大値のみを知っている再割り当てを回避する方法は?

例として、整数のリストがあるとしますが、このリストのサイズはわかりません (たとえば、このリストはファイルの読み取りから取得されます)。しかし、このリストの最大サイズが 1000 であることはわかっています。リストの実際のサイズが 800 であるとしましょう。

現在、std::reserve(1000) を使用してから、push_back() のループを使用しています。予約を使用して、再割り当てを防ぎます。しかし、 push_backs の最後にある余分なスペースを解放するにはどうすればよいでしょうか? (例の場合、1000-800=200 の余分なスペースを解放する方法は?)

どうもありがとうございました。

4

2 に答える 2

4

使用できますstd::vector::shrink_to_fit()

std::vector<int> v;
v.reserve(1000);
for(int i=0;i<800;++i)
    v.push_back(10);

v.shrink_to_fit();
于 2012-04-29T02:28:53.980 に答える
1

基本的に、正しいサイズで新しいベクターを作成し、2 つのベクターの内容を交換する必要があります。幸いなことに、STL ではこれはワンライナーです。以下に例を示します。 std::vector を縮小するには?

于 2012-04-29T02:20:45.370 に答える