Problem beim Löschen von in Listen



  • Ich möchte ein Element in einer Liste löschen. Dazu durchlaufe ich die Liste per Iterator. Und wenn das Element gefunden wurde soll es gelöscht werden. Dazu verwende ich den Befehl:
    Liste.remove(iterCopy);
    iterCopy ist die Kopie des Iterators, da ich den eigentlichen Iterator weiter benötige und diesen vor dem Löschen inkrementiere. Allerdings hat das nicht funktioniert. Jetzt habe ich gelesen, dass man
    Liste.remove_next(iterCopy) verwenden muss, weil der Iterator zwischen die Objekte zeigt? Jedenfalls gab das nen Fehler.
    'remove_next' : Ist kein Element von 'list<struct GraphObj,class std::allocator<struct GraphObj> >'

    Kann mir jemand sagen wie es richtig geht?
    Danke



  • Hallo,
    erase ist die Methode die du brauchst:

    typedef std::list<DeinObjektTyp> List;
    List l;
    ...
    List::iterator end = l.end();
    for (List::iterator it = l.begin(); it != end;)
    {
        if (foundElement(*it))
            l.erase(it++);    // erase invalidiert den Iterator -> it vorher
                              // weitersetzen
        else
            ++it;
    }
    

Anmelden zum Antworten