0

100*100*500 のベクトル (または配列としましょう) を生成しました。要素をランダムに埋めます。一部の要素は空のままです。未使用の要素のためにメモリを解放できますか? それとも、ベクトルデータ構造はすでにそれを行っていますか?

ありがとうございました

4

3 に答える 3

0

を使用していてstd::vector、「100*100*500」が「容量が 5000000 のベクトル」を意味するstd::vector場合、すべてのデータが単一のメモリ ブロックに格納されるため、コンテナーは高速なインデックス作成と直接データ アクセスを提供することに注意してください。C++ では、次のように記述できます。

int* arr = new int[5]; 
arr[0] = 1; 
arr[4] = 5;

この例では、容量が 5 の配列がありますが、1 番目、2 番目、3 番目の要素はまだ使用されていませんが、割り当てられたがまだ使用されていないメモリを解放する方法はありません。また、容量が 2 の新しい配列を作成し、すべての要素を新しい配列にコピーしてから、最初の配列を削除することもできます。仕組みは次のstd::vectorとおりです。c++11 では も使用できますstd::vector::shrink_to_fit()が、これは問題を解決しません。これはstd::vector::shrink_to_fit()、配列を圧縮せず、ベクトルの後ろから未使用のメモリ割り当てを削除するだけだからです。

于 2013-08-26T12:15:21.660 に答える
0

配列に保存する要素のサイズによって異なります...ポインター配列を使用して、すべての要素をnullptr/NULLに設定できます。したがって、 new 演算子を使用してヒープ上に新しい要素を作成できます。しかし、要素がポインター自体と同じくらい小さい場合、このソリューションは無意味です。

于 2013-08-26T12:12:09.557 に答える