Zugriff per -> auf end() Iterator legal?
-
Nein schrieb:
nein.
denn it->bla ist per Definition äquivalent zu (*it).bla. it wird also dereferenziert.
Das Dereferenzieren eines Iterators der von einer end()-Methode eines STL-Containers geliefert wurde ist aber nach 24.1/5 nicht erlaubt.
-
Kann das Programm bei sowas auch abstürzen oder bekomme ich nur falsche Werte?
Das Verhalten ist undefiniert. Dein Programm könnte sich also auch einen Bart wachsen lassen und der Nation of the bearded beitreten. Es könnte auch abstürzen (das wäre dein Glück) oder einfach genau das tun, was du gerne hättest.
-
HumeSikkins schrieb:
denn it->bla ist per Definition äquivalent zu (*it).bla. it wird also dereferenziert.
Das Dereferenzieren eines Iterators der von einer end()-Methode eines STL-Containers geliefert wurde ist aber nach 24.1/5 nicht erlaubt.Das ist doch dumm, wozu gibts dann end()? Was soll ich sonst machen, wenn ich das letzte Element der Liste verändern will?
thx
Glamdring
-
Das ist nicht das letzte, sondern eins dannach.
-
Für das letzte Element gibt es normalerweise Container.back().
-
Ok, wenn das so ist nehm icvh alles zurück
mfg
Glamdring
-
Das letzte müsstest du durch end()-1 erreichen können.
MfG MAV
-
Nur bei Containern mit Random-Access-Iteratoren. Listen gehören nicht dazu.
-
foo.back ist das letzte Element
und
foo.rbegin()
ist ein reverse_iterator auf das letzte Element.
-
Glamdrink schrieb:
Das ist doch dumm, wozu gibts dann end()?
Um zu wissen wo der Container zu Ende ist, also eine Abbruchbedinung zu haben.
Ausserdem gibts zB. find()-Funktionen die end() zurückliefern wenn nichts gefunden wurde. Wäre ja blöd wenn end() dann das letzte Element ist.