reverse_iterator in normalen iterator umwandel



  • Hi,

    wie kann ich es erreichen, dass ein reverse_iterator in einen normalen iterator umgewandelt wird, oder, wie kann ich es erreichen, dass std::container::erase einen reverse_iterator annimmt...

    Danke,

    It.



  • std::Iterator schrieb:

    wie kann ich es erreichen, dass ein reverse_iterator in einen normalen iterator umgewandelt wird

    Über die Memberfunktion base() des reverse_iterators erhälst du den "korrespondierenden" Iterator.
    Beachte das dieser "korrespondierenden" Iterator relativ zu einem Insert gesehen ist. D.h. wenn du einen reverse_iterator ri hast und die willst Code wie

    cont.insert(ri);
    

    ausführen, dann kannst du stattdessen:

    cont.insert(ri.base());
    

    schreiben.

    Anders sieht es beim Löschen aus: Hier ist der korrespondierende Iterator zu einem reverse_iterator der Iterator eins vor dem base()-Iterator.
    Aus:

    cont.erase(ri);
    

    wird also entweder:

    cont::iterator it(ri.base());
    cont.erase(--it);
    

    oder aber:

    cont.erase( (++ri).base() );
    

    kann ich es erreichen, dass std::container::erase einen reverse_iterator annimmt...

    Gar nicht. Benutze die oben erklärte Konvertierung.


Anmelden zum Antworten