Löschen eines Objekts auf das ein Iterator zeigt ?



  • Hallo Leute,

    ich hab mal das verhalten von einem Vector und der liste (STL container) bezüglich das löschen eine Elemntes auf das der entsprechende Iterator zeigt.

    -bsp.: Vector:

    Iterator zeigt auf Element 2, löschen element 2, Iterator zeigt nun auf element 3.

    - bsp.: Liste:

    Iterator zeigt auf Element 2, löschen element 2, Iterator zeigt nach nirvana.

    Was schreibt der standart vor? ich möchte gerne ein container schreiben mit einem iterator. Allerdings soll der Iterator gütlig bleiben wenn ich das ensprchende Elemnt lösche auf das er zeigt, und sich so verhalten wie beim vector.

    Aber wie kann ich den existierenden iterator objekten mitteilen das sie jetzt auf ein andere obejkt zeigen? geht sowas?



  • it = container.erase( it );
    

    Der Standard schreibt vor, dass der Zugriff auf Iteratoren gelöschter Objekte undefiniertes Verhalten hervorruft. Glücklicherweise geben die Erase-Funktionen der Sequenz-Container immer einen Iterator auf das dem gelöschten folgende Element zurück.



  • Aber echt^^ Damit kann ich leben, dann mach ich es auch so.. danke



  • da fällt mir noch was ein:

    Was Schreibt der Standart vor, wenn:

    -Vector ,Liste leer ist, und ich iterator it= foo.begin(); mache?

    -Vector, Liste Elemente hat, und ich aber über die grenzen hinaus iteriere?

    Alles undefiniertes verahlten oder?



  • Im ersten Fall ist it == foo.begin() == foo.end(). Container haben immer einen Iterator, der "eins hinter das letzte Element" zeigt. Diesen Iterator darf man aber nicht dereferenzieren.

    Das Iterieren über die Grenzen (also --foo.begin() oder ++foo.end()) ist undefiniert.


Anmelden zum Antworten