1

std::vector::reserveベクトルに一定量のメモリを予約するために呼び出した場合、このメモリは破棄するまで割り当てられたままになりますか、または予約したメモリを解放vectorするメソッド呼び出し (おそらく ) が存在しますか?clear

編集:コンテナを何度も再利用するため、パフォーマンス上の理由から、メモリ割り当てを避けたいと考えています。このため、事前にメモリを予約しているので、割り当てられたメモリを失うために何もしないことを確認したいと思います。

4

2 に答える 2

1

編集:コンテナを何度も再利用するため、パフォーマンス上の理由から、メモリ割り当てを避けたいと考えています。このため、事前にメモリを予約しているので、割り当てられたメモリを失うために何もしないことを確認したいと思います。

次の 2 つのことだけを避ける必要があります。

1. Shrink_to_fitですが、これはメモリを解放するための要求にすぎません。ベクトルが実際にこれを行う必要はありません。

2. 空のベクターを使用した場合のみ、確実に容量が変更されます ( ideoneswapを参照):

vector<int> v;
v.reserve(100);
vector<int>().swap(v);
ASSERT(v.capacity() == 0);

pop_back 、clear 、またはより小さいサイズへのサイズ変更のいずれ、ベクトル容量を削減しません。

ところで、std::array<>の使用を検討してください。

于 2013-06-21T15:19:59.653 に答える