Heim >Backend-Entwicklung >C++ >So verkleinern Sie die Kapazität eines „std::vector': Der „Swap-Trick' erklärt

So verkleinern Sie die Kapazität eines „std::vector': Der „Swap-Trick' erklärt

Barbara Streisand
Barbara StreisandOriginal
2024-10-26 15:58:30247Durchsuche

How to Shrink a `std::vector`'s Capacity: The

So reduzieren Sie die Kapazität eines std::Vector

Diese Frage, die bereits gestellt wurde, befasst sich mit einem spezifischen Problem, mit dem viele Programmierer bei der Arbeit mit std konfrontiert sind ::Vektoren. Es wird nach einer Methode gesucht, um die Kapazität eines Vektors zu verkleinern und seine überschüssige Speicherzuweisung zu reduzieren, nachdem sein Inhalt reduziert wurde.

Antwort:

Die empfohlene Lösung, wie vorgeschlagen in Effective STL von Scott Meyers (Punkt 17) besteht darin, den „Swap-Trick“ anzuwenden, um die überschüssige Kapazität zu reduzieren. Bei dieser Methode wird ein neuer Vektor mit der gewünschten reduzierten Kapazität erstellt und sein Inhalt mit dem ursprünglichen Vektor ausgetauscht.

<code class="cpp">vector<Person>(persons).swap(persons);</code>

Nachdem dieser Austausch durchgeführt wurde, wird die Zuordnung des ursprünglichen Vektors, der jetzt leer ist, aufgehoben und die neue Kopie wird angezeigt wird seinen Platz mit seiner reduzierten Kapazität einnehmen, die perfekt zu seinen aktuellen Inhalten passt.

Grundprinzip:

Diese Technik nutzt einen Schlüsselaspekt des Kopierkonstruktors des Vektors Verhalten. Beim Kopieren von Elementen aus einem Vektor weist der neue Vektor unabhängig von der Kapazität des ursprünglichen Vektors nur so viel Speicher zu, dass die kopierten Elemente Platz finden. Durch den Austausch des neuen, verkleinerten Vektors mit dem Original wird die überschüssige Kapazität effektiv reduziert.

Das obige ist der detaillierte Inhalt vonSo verkleinern Sie die Kapazität eines „std::vector': Der „Swap-Trick' erklärt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn