std::vector の容量を効果的に削減する方法
std::vector に過剰な容量があることに気付いた場合は、メモリを解放するためにサイズを縮小する方法はないかと疑問に思うかもしれません。これを行う直接的な方法はありませんが、「スワップ トリック」として知られる巧妙なテクニックがあります。
スワップ トリック
スコット マイヤーズ著『Effective』の項目 17 によると、 STL では、スワップ トリックを使用して、ベクトルから余分な容量をトリミングできます。その仕組みは次のとおりです。
<code class="cpp">vector<Person>(persons).swap(persons);</code>
この交換を実行すると、「persons」という名前のベクトルが「適合するように縮小」されます。これは、含まれる要素の数に合わせてその容量が削減されることを意味します。
トリックの仕組み
このトリックは、ベクターのコピー コンストラクターがコピーされる要素に必要な量のメモリのみを割り当てるという事実を利用します。元のベクトルと同じ数の要素を持つ新しいベクトルを作成することにより、コピー コンストラクターはより小さい容量の新しいベクトルを作成します。
その後、swap メソッドは元のベクトルと新しいベクトルの内容と容量を交換します。その結果、元のベクトルの容量が減って残ります。
以上がstd::vector の過剰な容量を削減する方法: スワップ トリックの説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。