Wie wird intern ein std::vector<int> erweitert bei push_back?

Perdan

Mitglied
Hallo zusammen,

ich erzeuge wie folgt einen Vektor.

std::vector<int> tempVec;

später fülle ich den Vektor mit tempVec.push_back(....)

Meine Fragen sind:

1. Wird jetzt bei jedem push_back() Aufruf der Speicherbereich erweitert? Dies würde ja intern großen Kopieraufwand bedeuten bei großen Vektoren. Oder wird immer ein Speicherblock auf einmal reserviert und erst wenn dieser Speicherblock nicht ausreicht wird ein neuer Block reserviert?

2. Falls es nach der zweiten Methode funktioniert, wie sehe ich wie groß ein solcher Speicherblock ist? Und wie kann ich diese Blockgröße festlegen?

Vielen Dank

MfG

Perdan
 
Hi.
ich erzeuge wie folgt einen Vektor.

std::vector<int> tempVec;

später fülle ich den Vektor mit tempVec.push_back(....)

Meine Fragen sind:

1. Wird jetzt bei jedem push_back() Aufruf der Speicherbereich erweitert?
Das hängt von der STL Implementierung ab, die du verwendest. In der Regel: nein.
Oder wird immer ein Speicherblock auf einmal reserviert und erst wenn dieser Speicherblock nicht ausreicht wird ein neuer Block reserviert?
Schau doch einfach in den STL Code.
2. Falls es nach der zweiten Methode funktioniert, wie sehe ich wie groß ein solcher Speicherblock ist?
http://www.cppreference.com/wiki/stl/vector/capacity
Und wie kann ich diese Blockgröße festlegen?
Kannst du nicht. Diese Möglichkeit ist vom C++ Standard nicht vorgesehen. Du könntest allerdings reserve() verwenden falls du die Größe irgendwie abschätzen kannst.

Gruß
 
Zurück