Frage

Unter Bezugnahme auf Artikel GOTW 54 von Herb Sutter, erklärt er über

  1. Der richtige Weg, um "Shrink-to-Fit" ein Vektor oder deque und

  2. Der richtige Weg, um ganz klar ein Vektor oder deque

  

Können wir nur container.resize() verwenden   und container.clear() für die oben genannte Aufgabe   oder bin ich etwas fehlt?

War es hilfreich?

Lösung

Es gibt zwei verschiedene Dinge, die ein Vektor gilt: size Vs capacity. Wenn Sie nur den Vektor resize, gibt es keine Garantie, dass die Kapazität (wie viel Speicher reserviert) muss sich ändern. resize ist eine Operation, die sich mit wie viel werden Sie verwenden, nicht, wie viel der Vektor Kapazität ist.

So zum Beispiel.

size     == how much you are using
capacity == how much memory is reserved
vector<int> v(10);

v.resize(5); // size == 5 but capacity (may or may) not be changed
v.clear()    // size == 0 but capacity (may or may) not be changed

Am Ende Kapazität soll nicht auf jedem Betrieb geändert, denn das ist eine Menge Speicherzuweisung / Deallokation Kopf bringen würde. Er sagt, dass, wenn Sie brauchen, um " ausplanen " Speicher reserviert durch den Vektor, das tun.

Andere Tipps

Weder Resize () noch klar () Arbeit. Die .capacity() eines Vektors ist garantiert mindestens so groß wie der Strom des Vektors size() sein, und zumindest so groß wie die reserve()d Kapazität garantiert werden. Auch dann, wenn dieser .capacity() nicht schrumpfen, so dass es auch mindestens so groß wie jeder vorheriger size() oder reserve()ation ist.

Nun wird der .capacity() eines Vektors ist nur die Erinnerung es vorbehalten hat. Oft nicht alle, dass der Speicher cotains Objekte. Ändern der Größe entfernt Objekte, aber nicht recyceln nicht auf den Speicher. Ein Vektor kann nur seine Speicherpuffer recyclen, wenn eine größere Puffer zuordnet.

Der Swap-Trick funktioniert durch Kopieren aller ojekte zu einem kleineren, geeigneten Speicherpuffer. Danach kann der ursprüngliche Speicherpuffer zurückgeführt werden. Dies scheint die vorherige Anweisung zu verletzen, dass der Speicherpuffer eines Vektors nur wachsen kann. Doch mit dem Swap-Trick, Sie vorübergehend haben 2 Vektoren.

Der Vektor hat Größe und Kapazität. Es kann X-Elemente haben aber nicht initialisierten Speicher im Speicher für Y-Elemente mehr halten. In einer typischen Implementierung Lösch- Resize (wenn kleinere Größe Ändern der Größe) und klar wirken sich nicht auf die Kapazität. Der Vektor den Speicher um für sich selbst hält, sollten Sie neue Objekte, um es zu einem späteren Zeitpunkt hinzufügen möchten

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top