Resize auf STL-Vector
-
Hallo!
Interessehalber: Warum wird im folgenden Beispiel für die Operation
"v.resize();" der Default Constructor von someObject aufgerufen?vector<someObject> v; v.push_back(someObject(x)); v.push_back(someObject(x)); v.push_back(someObject(x)); v.resize(1);Beim Vergrößern wärs klar, aber beim Verkleinern hätte ich bloß
das Versetzen des End-Pointers erwartet.lg
-
Vermutlich weil der vector ein neues Array anlegt!?
-
Bist du da sicher? Eigentlich sollte nämlich tatsächlich das Ende abgeschnitten werden, denn resize ist laut Standard äquivalent zu
void resize ( size_type sz , T c = T ()) { if ( sz > size ()) insert ( end () , sz - size () , c ); else if ( sz < size ()) erase ( begin ()+ sz , end ()); else ; // do nothing }Und erase bis zum Ende darf nur Destruktoren aufrufen.
edit: Doh!
Da poste ich schon den Code und sehe es trotzdem nicht: Das Defaultargument von resize muss natürlich auch noch erstellt werden.