vector elemente löschen



  • hallo liebe leute..
    hab eine kleine frage zu std::vector.

    ein vector wird erstellt:

    vector<element*> v;
    

    danach wird er mit ein paar objektzeigern befüllt:

    for(.....){
    v.push_back(new element(x, y));
    }
    

    später im programm sollen die ganzen elemente aus dem vector gelöscht werden....

    for(...) {
    delete v[i];
    }
    v.clear();
    

    an diesem punkt liefert v.size() 0.

    später kommen wieder elemente in den vector rein
    wenn ich allerdings ein element dazupushe ist der vector schon 5 groß statt 1 ?
    was passiert da?
    wie kann ich alle elemente vom vector löschen und seine größe definitiv auf 0 setzen...?



  • Nachdem du clear() aufrufst, gibt dir size() immer 0 zurück. Und jedes push_back() erhöht die Grösse um 1, du scheinst wohl etwas falsch gemacht zu haben. Hast du Code, der den Fehler reproduziert?

    Und du meinst nicht capacity() , oder?



  • danke hast mir schon geholfen 🙂
    hab den aufruf von clear an der falschen stelle gehabt...

    stimmt das löschen so?
    oder kann ich mir das delete sparen?

    for(...) {
    delete v[i];
    }
    v.clear();
    


  • Nein, weil du die Elemente mit new anforderst, brauchst du sie auch mit delete freizugeben. Allerdings verfehlt das meiner Ansicht nach eine wichtige Aufgabe von Containern, nämlich dir die Speicherverwaltung abzunehmen. Spricht etwas gegen std::vector<element> ? Dann bräuchtest du nämlich weder new noch delete .



  • Nexus schrieb:

    Nein, weil du die Elemente mit new anforderst, brauchst du sie auch mit delete freizugeben. Allerdings verfehlt das meiner Ansicht nach eine wichtige Aufgabe von Containern, nämlich dir die Speicherverwaltung abzunehmen. Spricht etwas gegen std::vector<element> ? Dann bräuchtest du nämlich weder new noch delete .

    nein würde nix dagegensprechen.....
    dankeschön


Anmelden zum Antworten