ich die documentation würde sagen, ist ziemlich klar zu diesem Thema: alles nach data() + size()
kann zugewiesen, aber nicht initialisiert Speicher: wenn Sie wollen auch diesen Speicher initialisieren sollten Sie vector::resize
verwenden.
void reserve (size_type n);
Anfrage eine Änderung
Requests in der Kapazität, die der Vektor Kapazität enthalten n Elemente zumindest ausreichen.
Wenn n größer als die aktuelle Vektorkapazität ist, bewirkt die Funktion, dass der Container seinen Speicher um neu zuweist und seine Kapazität auf n (oder höher) erhöht. In allen anderen Fällen verursacht der Funktionsaufruf keine Neuzuweisung und die Vektorkapazität ist nicht betroffen.
Diese Funktion hat keine Auswirkungen auf die Vektorgröße und kann ihre Elemente nicht ändern.
Ich bin nicht sicher, warum Sie etwas nach data() + size()
nach reserve()
in erster Linie für den Zugriff möchten: die beabsichtigte Verwendung von reserve()
ist zu verhindern, dass unnötige Umschichtungen, wenn Sie wissen oder können die erwartete Größe des Containers schätzen, vermeiden Sie aber gleichzeitig die unnötige Initialisierung von Speicher, die entweder ineffizient oder unpraktisch ist (z. B. sind nicht-triviale Daten für die Initialisierung nicht verfügbar). In dieser Situation können Sie log(N)
Neuzuweisungen und Kopien mit nur 1 Verbesserung der Leistung ersetzen.
warum 'reserve' und nicht' resize'? 'reserve' weist nur Speicher zu," resize "Konstruktobjekte darin. –
Können wir Ihren Code sehen? – wasthishelpful
@ n.m Resize könnte so teuer sein. Reservieren wird garantieren, dass Sie Objekte später erneut platzieren können. –