2017-05-09 4 views
0

Shrink to fit --- Dies kann zu einer Neuzuweisung führen, hat jedoch keinen Einfluss auf die Vektorgröße und kann die Elemente nicht verändern.Kann shink_to_fit eine Verschiebung verursachen?

Meiner Meinung nach ist capacity() ist immer größer als size(), können wir es

deallocate(finish_, endOfStorage_ - finish_); 
endOfStorage_ = finish_; 

So nutzt tun Neuzuteilung nie benötigt. Irgendetwas stimmt nicht mit meiner Meinung?

+3

Ein Stück Speicher wurde zugewiesen; Wie könnten Sie einen Teil davon freigeben? – songyuanyao

+0

Vielen Dank. Es hat mich vor deiner Antwort verwirrt. – zwfars

Antwort

4

Das Zuordnungsmodell der C++ - Standardbibliothek erlaubt keine teilweise Freigabe von Speicher. Wenn Sie genügend Speicherplatz für 10 T s reservieren, haben Sie eine einzige Zuweisung von so viel Speicherplatz. Sie können einen Teil einer Zuordnung nicht entfernen. Sie können nur alle freigeben.

Wenn also shrink_to_fit die Kapazität ändert, kann dies nur durch Neuzuweisung geschehen.

+0

Danke für Ihre Hilfe. :) – zwfars

0

Um kurz zu beantworten .. Ja shrink_to_fit verursacht eine Umverteilung

fordert die Beseitigung von ungenutzten Kapazitäten. Es ist eine unverbindliche Anfrage, die Kapazität() auf size() zu reduzieren. Es hängt von der Implementierung ab, ob die Anforderung erfüllt ist. Bei einer Neuzuweisung werden alle Iteratoren einschließlich des letzten Iterators und alle Verweise auf die Elemente ungültig gemacht. Wenn keine Neuzuweisung stattfindet, werden keine Iteratoren oder Verweise ungültig gemacht.

Verwandte Themen