Also:
reserve() definiert die Mindestkapazität des Vektors
resize() definiert die aktuelle Grösse des Vektors
Bei mir, wenn ich das reserve() durch ein resize() ersetze erhalte ich folgendes:
Code:
peschmae@sid:/tmp$ ./test
empty?: 1
capacity: 0
size: 0
after reserve:
empty?: 0
capacity: 20
size: 20
after ini:
empty?: 0
capacity: 20
size: 20
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, peschmae@sid:/tmp$
Also alles wies sein sollte.
Wobei deine Verwendung von resize() hier eher etwas unglücklich ist, weisst du doch nachher nicht mehr welche Elemente des Vektors jetzt nützliche Informationen enthalten und welche nur durch das resize() entstanden sind...
(Wobei dir das wohl egal ist weil du nur wissen willst was genau was bewirkt oder wie?)
Also eigentlich besser sowas machen in der Praxis:
Code:
#include <iostream>
#include <vector>
using namespace std;
int main(int argc, char **argv)
{
vector<int> ivec;
cout << "after reserve:" << endl;
cout << "empty?: " << ivec.empty() << endl;
cout << "capacity: " << ivec.capacity() << endl;
cout << "size: " << ivec.size() << endl << endl;
for(unsigned int i = 0; i < 20; ++i)
{
ivec.push_back(i);
}
cout << "after ini:" << endl;
cout << "empty?: " << ivec.empty() << endl;
cout << "capacity: " << ivec.capacity() << endl;
cout << "size: " << ivec.size() << endl;
for(unsigned int i = 0; i < ivec.size(); ++i)
{
cout << ivec[i] << ", ";
}
return 0;
}
Wie du hier siehst ist capacity() > size(); d.h. es ist erstmal für mehr Elemente Speicher reserviert als du eigentlich belegt hast.
MfG Peschmä
Lesezeichen