Die beiden Funktionen machen sehr unterschiedliche Dinge!
Das resize()
Methode (und die Übergabe des Arguments an den Konstruktor entspricht dieser) fügt eine entsprechende Anzahl von Elementen in den Vektor ein oder löscht ihn, um ihm eine bestimmte Größe zu geben (optional gibt es ein zweites Argument, um ihren Wert anzugeben). size()
Dies wirkt sich auf die aus , die Iteration durchläuft alle diese Elemente, push_back wird nach ihnen eingefügt und Sie können direkt mit auf die Elemente zugreifen operator[]
.
Das reserve()
Methode weist nur Speicher zu, lässt ihn jedoch nicht initialisiert. Es wirkt sich nur aus capacity()
, size()
bleibt aber unverändert. Es gibt keinen Wert für die Objekte, da dem Vektor nichts hinzugefügt wird. Wenn Sie dann die Elemente einfügen, erfolgt keine Neuzuweisung, da dies im Voraus erfolgt ist. Dies ist jedoch der einzige Effekt.
Es kommt also darauf an, was Sie wollen. Wenn Sie ein Array mit 1000 Standardelementen möchten, verwenden Sie resize()
. Wenn Sie ein Array möchten, in das Sie voraussichtlich 1000 Elemente einfügen und einige Zuordnungen vermeiden möchten, verwenden Sie reserve()
.
BEARBEITEN : Durch den Kommentar von Blastfurnace habe ich die Frage erneut gelesen und festgestellt, dass in Ihrem Fall die richtige Antwort nicht manuell vorab zugewiesen wird. Fügen Sie einfach die Elemente am Ende nach Bedarf ein. Der Vektor wird bei Bedarf automatisch neu zugewiesen und führt mehr aus effizienter als die manuelle Art und Weise erwähnt. Der einzige Fall, in dem dies reserve()
sinnvoll ist, ist, wenn Sie eine einigermaßen genaue Schätzung der Gesamtgröße haben, die Sie im Voraus benötigen.
EDIT2: Anzeigenfrage bearbeiten: Wenn Sie eine anfängliche Schätzung haben, dann reserve()
diese Schätzung. Wenn sich herausstellt, dass dies nicht ausreicht, lassen Sie den Vektor einfach das tun.
std::vector
.