この質問は以前に質問されたもので、std を使用するときに多くのプログラマーが直面する特定の問題に対処します。 ::ベクトル。ベクトルの容量を縮小し、その内容が削減された後の過剰なメモリ割り当てを削減する方法を模索します。
答え:
提案されている推奨ソリューションScott Meyers による効果的な STL (項目 17) では、過剰な容量をトリミングするために「スワップ トリック」を採用しています。この方法では、必要な容量を削減した新しいベクターを作成し、その内容を元のベクターと交換します。
<code class="cpp">vector<Person>(persons).swap(persons);</code>
この交換を実行すると、空になった元のベクターの割り当てが解除され、新しいコピーが作成されます。は、現在の内容に完全に適合する削減された容量で置き換えられます。
基礎となる原則:
この手法は、ベクターのコピー コンストラクターの重要な側面を利用します。行動。ベクトルから要素をコピーする場合、新しいベクトルは、元のベクトルの容量に関係なく、コピーされた要素を収容するのに十分なメモリのみを割り当てます。新しい、縮小されたベクトルを元のベクトルと交換することにより、過剰な容量が効果的にトリミングされます。
以上が「std::vector」の容量を縮小する方法: 「スワップ トリック」の説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。