Heim  >  Artikel  >  Backend-Entwicklung  >  So reduzieren Sie überschüssige Kapazität in einem std::vector: Der Swap-Trick erklärt

So reduzieren Sie überschüssige Kapazität in einem std::vector: Der Swap-Trick erklärt

Patricia Arquette
Patricia ArquetteOriginal
2024-10-26 22:57:03154Durchsuche

How to Reduce Excess Capacity in a std::vector: The Swap Trick Explained

So reduzieren Sie effektiv die Kapazität in einem std::vector

Wenn Sie sich mit einem std::vector konfrontiert sehen, der über überschüssige Kapazität verfügt, Sie fragen sich vielleicht, ob es eine Möglichkeit gibt, die Größe zu verkleinern, um Speicher freizugeben. Obwohl es dafür keine direkte Methode gibt, gibt es eine clevere Technik, die als „Swap-Trick“ bekannt ist.

Der Swap-Trick

Gemäß Punkt 17 von Scott Meyers‘ Effective STL können Sie den Swap-Trick verwenden, um überschüssige Kapazität von einem Vektor zu entfernen. So funktioniert es:

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

Nachdem dieser Austausch durchgeführt wurde, wird der Vektor mit dem Namen „Personen“ „passend verkleinert“, was bedeutet, dass seine Kapazität reduziert wird, um der Anzahl der darin enthaltenen Elemente zu entsprechen.

So funktioniert der Trick

Dieser Trick macht sich die Tatsache zunutze, dass der Kopierkonstruktor des Vektors nur die erforderliche Menge an Speicher für die zu kopierenden Elemente zuweist. Durch die Erstellung eines neuen Vektors mit der gleichen Anzahl von Elementen wie der ursprüngliche Vektor erstellt der Kopierkonstruktor einen neuen Vektor mit einer kleineren Kapazität.

Die Swap-Methode tauscht dann die Inhalte und Kapazitäten des ursprünglichen und des neuen Vektors aus. Infolgedessen bleibt die Kapazität des ursprünglichen Vektors verringert.

Das obige ist der detaillierte Inhalt vonSo reduzieren Sie überschüssige Kapazität in einem 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