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!?


  • Mod

    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.


Anmelden zum Antworten