In C++ wird die Vektor-Funktion push_back erhöhen Sie die Größe ein leeres array?
Kurze Frage. Sagen wir, ich deklarieren Sie einen Vektor der Größe 20. Und dann möchte ich noch ein paar zahlen es mit push_back.
vector<int> myVector(20);
myVector.push_back(5);
myVector.push_back(14);
Ist die Kapazität meines Vektor-jetzt 22, oder ist es immer noch 20? Waren 5 und 14 Hinzugefügt Indizes [19] und [20], jeweils? Oder sind Sie auf [0] und [1]?
Zögern Sie nicht tatsächlich versuchen, diese dich.
Herzlich willkommen auf StackOverflow, ich hoffe du liest das FAQ.
Herzlich willkommen auf StackOverflow, ich hoffe du liest das FAQ.
InformationsquelleAutor iaacp | 2011-10-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nach diesen Angaben seine Kapazität wird durch die Implementierung festgelegt. (Bitte beachten Sie, dass ist Verschieden von Ihrer Größe.)
Dieser erstellt einen vector gefüllt mit zwanzig 0 ist. Seine Größe ist zwanzig, genau, und Ihre Fähigkeit, mindestens zwanzig. Ob oder nicht es ist genau zwanzig wird durch die Implementierung festgelegt; es kann eine mehr (wahrscheinlich in der Praxis nicht).
Danach zwanzig erste element des Arrays ist 5, und die Kapazität ist noch einmal die Implementierung festgelegt. (Wenn die Kapazität hatte, war genau zwanzig vor, er ist nun erhöht in einer unbestimmten Art und Weise.)
Ebenfalls, jetzt die zwanzig-zweite element des Arrays ist 14, und die Kapazität wird durch die Implementierung festgelegt.
Wenn Sie möchten, um Speicherplatz zu sparen, aber nicht Elemente einfügen, Sie würde es so machen:
vector
s "- Unterstützung (amortisiert) Konstante Zeit Einfüge-und Löschoperationen am Ende", so dass in der Praxis die Kapazität in der Regel erweitert um einen Faktor zwei, wennpush_back()
mehr Platz braucht.Okay. Danke. Ich wusste nicht, es würde sich füllen mit 20 0. Das wäre wirklich versaut mein Programm. Ich weiß nicht, warum ich nicht glaube, dass einfach keine Größe angeben, da, wie Sie sind dynamisch und das ist es, was ich brauche. Ein derp ist auf meinem Namen.
InformationsquelleAutor GManNickG
size
ist die Anzahl der Elemente im vector-container.capacity
ist die Größe des belegten Speicherplatzespush_back
erhöht effektiv den Vektor-Größe von eins, die bewirkt, dass eine Umverteilung der internen zugewiesenen Speicher-wenn die Vektor-die Größe war gleich dem Vektor Kapazität, bevor der Anruf.Mehr info: http://www.cplusplus.com/reference/stl/vector/
InformationsquelleAutor Jean Logeart
push_back
erhöht sich die Größe derstd::vector
und legt die neuen Elemente, die auf der Rückseite desvector
(andere Container haben auch einepush_front
- Methode zu tun die gleiche Sache auf der Vorder-als auch).Allerdings gibt es einen Unterschied zwischen der Größe und der Kapazität eines
vector
. Die Größe bezieht sich darauf, wie viele Elemente eigentlich in dervector
jetzt; die Kapazität bezieht sich auf die Gesamtzahl der Elemente, dievector
halten kann, ohne die Neuzuweisung von Speicher. Es ist möglichreserve()
Speicher, wenn Sie wissen, dass Sie gehen, um mehrere Elemente und nicht wachsen wollen, dievector
Stückwerk.Richtig, es muss nicht unbedingt die Kapazität zu erhöhen. Ich erwähne nur, weil
std::vector
geht durch die Mühe macht die Unterscheidung so ist es wichtig, dass die Bedingungen gerade, vor allem beim Lesen der Dokumentation fürstd::vector
.InformationsquelleAutor Max Lybbert
Als Vektor ist nicht leer hat aber eine Größe von 20 (enthält 20 Elemente) und Sie
push
2 Elemente derback
es enthält jetzt 22 Elemente. Aber die neuen Elemente sind nicht Indizes 19 und 20, sondern 20 und 21.Wenn Sie wirklich wollen, um nur reserviert ausreichend Speicher für den Vektor zu halten 20-Elemente (ohne tatsächlich mit allen anderen Elementen), um zu verhindern, dass kostspielige Umschichtungen, dann sollten Sie rufen
In diesem Fall wird der Vektor noch leer, aber es hat genügend Speicher um mindestens 20 Elemente (mit
push_back
zum Beispiel), ohne Neuzuordnung von Ihren internen Speicher. In diesem Fall ist der Vektor enthält nur die 2 Elemente, die Siepush
ed_back
.InformationsquelleAutor Christian Rau
push_back
erhöht sich die Kapazität des Vektors zumindest die neue Größe des Vektors, aber evtl. (also wahrscheinlich) etwas größer.Weil
push_back
erforderlich ist, um in O(1) amortisiert Zeit, jede Umverteilung wird es sein, einige mehrere der alten Kapazität. In einer typischen Implementierung ist, dass mehrere 2.Aber die genaue Kapazität zu erhöhen, ist nicht angegeben. Wenn Sie erfordern eine präzise Kontrolle über die Kapazität, Verwendung
reserve
....
Re-Lesen Sie Ihre Frage, ich bin nicht sicher, Sie verstehen den Unterschied zwischen einer Vektor-die Größe und die Speicherkapazität. Die Größe ist die Anzahl der Elemente. Die Kapazität ist die Anzahl der Elemente des Vektors halten kann ohne Durchführung einer Umlegung. Das heißt, Sie können
push_back
Kapazität()-size() Elemente vor einer reallokation geschieht.In deinem Beispiel, 5 und 14 erscheinen in myVector[20] und myVector[21], beziehungsweise.
Nein, es ist nicht sinnlos. Wenn Sie im Voraus wissen, wie viel Zeug Sie planen, stellen in den Vektor, aber nicht den eigentlichen Stoff auf der hand, bei der Initialisierung des Vektors, dann können Sie
reserve()
eine Menge, so dass dievector
nicht zu tun haben, die eine Umverteilung.Es ist nicht sinnlos, wenn Sie tatsächlich kümmern Umverteilung. Umverteilung (a) Zeit braucht und b) ungültig Referenzen/Zeiger auf Elemente, die in den Vektor.
reserve
können Sie die Kapazität zur Vermeidung künftiger Umschichtungen. Beachten Sie, dass Ihr Beispiel wird die Größe des vectors, nicht die Kapazität. Erstellen Sie einen Vektor von 20 initialisierten Integer-zahlen.InformationsquelleAutor Nemo
Gut,
vector
hat der member-Funktionpush_back
. Andere Sequenzen wiedeque
habenpush_front
.Vielleicht erinnern Sie sich, dass:
Ist, können Sie nicht fügen Sie an der front oder in der Mitte, da die
vector
ist spezialisiert für den schnellen Zugriff auf Elemente über index. Wenn Sie hinzufügen möchten, auf Vorder-und Rückseite, die Sie verwenden könnendeque
ähnlichvector
. Wenn Sie hinzufügen möchten, auf front, Rücken und überall Sie können verwendenlist
. Beachten Sie, dasslist
keine Indizierung wiedeque
undvector
.Jedoch ein Vektor wird angenommen, dass mehr Kapazität als Ihre tatsächliche Größe. Wenn Sie Elemente hinzufügen, ist es nicht notwendig, zusätzlichen Speicher zuweisen. Tut es nur, wenn die Kapazität entspricht der Größe. Auf viele Compiler, die neue Kapazität wird das doppelte des alten. Nach Zuweisung, es kopiert alle Elemente in die neue Position. Ein solches Verhalten kann teuer werden in Bezug auf Speicher, jedoch.
InformationsquelleAutor