6 Stimmen

Was ist die Kapazität eines leeren Vektors?

Sieht nach einer dummen Frage aus. Aber Kommentar zu meinem Antwort auf eine der SO-Fragen hat mich zum Nachdenken gebracht.

[Kommentar sagt, dass die Kapazität bei einem leeren Vektor nicht Null sein muss]

Standardmäßig würde meine Antwort 0 lauten, da es keine Elemente im Vektor gibt. Es ist sinnvoll, die Kapazität bei 0 zu belassen, und bei der ersten Zuweisung kann sie ohne Leistungseinbußen erhöht werden.

Aber die Norm sagt dazu nichts aus. (Ich habe auch in Josuttis Buch nachgesehen).

Ist es rein implementierungsspezifisch? Verwendet irgendein STL-Anbieter eine beliebige Zahl als Kapazität für den leeren Vektor?

Irgendwelche Gedanken...

16voto

Kirill V. Lyadvinsky Punkte 92957

Der C++ Standard 23.2.4.2 besagt nur, dass vector::capacity es

Die Gesamtzahl der Elemente, die der Vektor aufnehmen kann, ohne dass eine Neuzuweisung erforderlich ist.

Das bedeutet, dass der tatsächliche Wert vollständig implementierungsspezifisch ist.

7voto

GManNickG Punkte 476445

Die Kapazität kann so gewählt werden, wie es die Durchführenden für richtig oder notwendig halten.

Es sollte auch beachtet werden, dass es nie "sicher" ist, anzunehmen, dass man den aktuellen Stand der Dinge kennt. capacity() ohne einen Aufruf dieser Funktion. Wenn Sie 10 Elemente reservieren, steht es dem Implementierer frei, hundert Elemente zuzuweisen, wenn er das möchte. Oder 11, 42 (bevorzugt) oder nur 10.

0voto

Donnie Punkte 43338

Ein kurzer Blick auf Google und ein paar zufällige Foren (mit im Allgemeinen unbekannter Herkunft, also, ja) zeigt, dass es sich um eine spezifische Implementierung handelt.

Das ist so gut wie kein Problem, denn man kann es sofort mit einem Aufruf von reserve .

-1voto

Vivek Punkte 433

Man kann die Kapazität eines Vektors ändern, indem man die resize()-API für den Vektor verwendet, wenn man sich sicher ist, welche Daten der Vektor speichern soll, und das ist implementierungsspezifisch.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X