Löschen aus Kontainern



  • Hallo,

    Mein folgender Code zeigt wie ich meine Objekte aus einem Kontainer, in diesem Fall 'vector', lösche:

    for (vector<MyClass>::iterator it = MyObjects.begin(); it != MyObjects.end(); ++it) {
        it->Calculate();
        if (it->isDelete) // public bool Variable
            MyObjects.erase(it--); // damit der Iterator auf das aktuelle Objekt zeigt
    }
    

    Ich 'glaube' aber das diese Methode nicht ganz richtig ist, oder?



  • Was meinst du mit "glaube"? Die Lösung wird zumindest Probleme bekommen, wenn du das erste Element löschen willst. Korrekterweise nutzt man die Möglichkeit aus, daß erase() einen gültigen Iterator auf den Nachfolger des gelöschten Elements zurückgibt:

    for (vector<MyClass>::iterator it = MyObjects.begin(); it != MyObjects.end();/* ++it*/) {
        it->Calculate();
        if (it->isDelete) // public bool Variable
            it = MyObjects.erase(it); // damit der Iterator auf das aktuelle Objekt zeigt
        else
            ++it;
    }
    


  • Okay, danke 🙂


Anmelden zum Antworten