STL Vector Grösse
-
mit reserve stellst Du nur sicher, dass der vector min. 10 Elemente aufnehmen kann, bevor der Speicher neu angefordert werden muss. Um einen vector der Groesse 10 zu erzeugen, musst Du resize(10) benutzen.
-
Hm, doch push_back fügt mir nicht an der 3-ten Stelle was ein sondern am Ende des Vektors und zudem ist es sehr teuer wie ich gelesen habe.
Muss ich somit erst test.resize() machen und dann die Elemente hinzufügen?
Doch dann ist mir der Sinn von reserved nicht so ganz klar.
-
Mit reserve() sagt man dem Container sozusagen, was auf ihn zukommt. So kann er sich direkt genug Speicher für die kommenden Elemente sichern.
-
Mit reserve kannst du zum erhindern, dass an zeitkritischen punkten ein resize durchgeführt wird.
Du kannst natürlich auf das Element mit index 3 zugreifen, nachdem du mindestens vier eingefügt hast.
-
bucada schrieb:
[...] und zudem ist es [push_back] sehr teuer wie ich gelesen habe.
Das stimmt nicht! Die push_back-Operation ist sehr schnell.
<a href= schrieb:
http://www.cppreference.com/cppvector/push_back.html">push_back() runs in constant time.
-
push_back ist schnell solange kein resize gemacht werden muss, oder?
-
templäd schrieb:
push_back ist schnell solange kein resize gemacht werden muss, oder?
Schon, nur ist es halt nicht langsamer, als wenn man erst resize macht und dann über den []operator "hinzufügt". Für's resize ist push_back halt gedacht, und wem es zu lahm ist, der macht halt vorher ein reserve().
mfg.
-
-predator- schrieb:
Das stimmt nicht! Die push_back-Operation ist sehr schnell.
<a href= schrieb:
http://www.cppreference.com/cppvector/push_back.html">push_back() runs in constant time.
Das sagt nichts darüber aus, ob es schnell geht. Das bedeutet nur, dass die Zeit unabhängig von der Anzahl der Elemente des vectors ist.
-
Man kann auch im Konstruktor schon eine Größe vorgeben.
vector<int> test(10);erzeugt einen vector mit 10 Elementen. d.h. hier wäre test[3] = 1; zulässig und size() würde 10 zurückgeben.
-
Was manche vielleicht stören könnte, ist dass push_back gewöhnlich die Reserve bei zu kleinen vector-Containern verdoppelt.
-
MFK schrieb:
-predator- schrieb:
Das stimmt nicht! Die push_back-Operation ist sehr schnell.
<a href= schrieb:
http://www.cppreference.com/cppvector/push_back.html">push_back() runs in constant time.
Das sagt nichts darüber aus, ob es schnell geht. Das bedeutet nur, dass die Zeit unabhängig von der Anzahl der Elemente des vectors ist.
OK, da hast du natürlich recht; ich hätte noch einen Satz dazu schreiben sollen.
Nichtsdestotrotz ist push_back() schnell.