Problem mit vector<_Ty>::erase()



  • Hi,
    ich hab mal wieder ein Problem mit dem ich allein nicht fertig werde:
    Ich habe 2 Iteratoren auf 2 verschiedene Elemente eines vectors.
    Nun möchte ich nach bearbeitung beide Elemente mit erase() löschen. Das Problem ist, dass ein Iterator ungültig wird, sobald ich das Element des ersten Iterators lösche. Da der verbliebene Iterator ungültig ist, kann ich ihn natürlich nicht als Parameter an erase() übergeben.
    Nun sind aber beide Elemente im vector, und damit auch die Iteratoren unabhängig voneinander, ich kann also auch nicht irgendwie den 2. iterator n-mal inkrementieren oder dekrementieren um ihn wieder auf den richtigen Wert zu setzen.

    Gibt es irgendeine Möglichkeit, die beiden Elemente in einem Zug zu löschen? Oder das Problem anders zu lösen?

    P.S.: Was das roblem besonders ärgerlich macht, ist, dass es gegen Ende der alpha-Phase meines Projektes (ein Formelparser) auftritt, aber das nur am Rande.


  • Mod

    erase invalidiert nur iteratoren, die hinter dem element, das gelöscht wird, liegen. wenn du also von hinten her löscht, bekommst du keine probleme.



  • Ja, weiß ich, aber ich kann nicht kontrollieren, ob der 2.e Iterator dahinter oder davor ist. Er wird sogar meistens dahinter sein.



  • du kannst ja testen ob iterator1<iterator2 ist 🙂


  • Mod

    0



  • ahh, gute Idee!
    Ich probiers gleich mal aus.

    Funzt perfekt! 🕶
    Danke!

    Dann kann ich mich jetzt endlich schlafen legen, mit dem schönen Gedanken, dass die alpha Phase beendet ist und ich in die beta Phase steige! Endlich!


Anmelden zum Antworten