C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

vergleich const iterator mit v.end()

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German)
View previous topic :: View next topic  
Author Message
claus.hirth@swissonline.c
Guest





PostPosted: Sat Sep 06, 2003 7:36 pm    Post subject: vergleich const iterator mit v.end() Reply with quote



....

typedef vector < char > VT ;

VT::const_reverse_iterator i = v.rbegin() ;
VT::const_reverse_iterator ei = v.rend() ;

while ( i != ei ) // das funktioniert (1)
{ ... ++i ... }


while ( i != v.rend() ) // das funktioniert nicht,
// wird vom Compiler abgelehnt. (2)
{ ... ++i ... }

Mal davon abgesehen, dass man es so wie bei (1) machen sollte
um den Aufruf von rend nur ein einziges Mal auszulösen,
warum reklamiert mein Compiler bei (2), dass er i nicht mit dem
Ergebnis von v.rend() vergleichen kann?

Wenn ich v.rend() ersetze durch das was im STL-Header-File für
rend() steht, dann funktioniert es auch. (3) Also schafft es
gcc 3.3 20030226 irgendwie nicht die richtige Funktion auszuwählen?

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
Back to top
Markus Schaaf
Guest





PostPosted: Sun Sep 07, 2003 12:51 am    Post subject: Re: vergleich const iterator mit v.end() Reply with quote



<claus.hirth (AT) swissonline (DOT) ch> schrieb:

Quote:
typedef vector < char > VT ;

VT::const_reverse_iterator i = v.rbegin() ;

while ( i != v.rend() ) // das funktioniert nicht,

warum reklamiert mein Compiler bei (2), dass er i nicht mit dem
Ergebnis von v.rend() vergleichen kann?

Man kann im Standard nichteinmal die Forderung finden, daß das
für normale Iteratoren funktionieren muß. Für Reverse-Iteratoren
kann man sogar zeigen, daß es nach Standard nicht funktionieren
/kann/.

Der Standard verlangt zwar, daß Iteratoren vom selben Typ
miteinander vergleichbar sind, und er verlangt auch, daß ein
»iterator« (des Containers) in den zugehörigen »const_iterator«
konvertierbar ist. Er verlangt aber eben nicht, daß ein Iterator
mit einem anderen Objekt, welches in den Iteratortypen
konvertiert werden kann, vergleichbar ist. (Er sagt AFAIK
nichteinmal, was "konvertierbar" genau heißt.)

Nun geht es oben um Reverse-Iteratoren. Wenn man die Definition
von »reverse_iterator« für »std::vector« und die Requirements für
Reverse-Iteratoren hernimmt, würde man eine Ambigious-Meldung
erwarten: Ein Reverse-Iterator kann nämlich prinzipiell in einen
Reverse-Iterator beliebigen Typs konvertiert werden. Nur schlägt
für die meisten die Konvertierung fehl. Man könnte den Vergleich
zwar als Element-Funktion deklarieren (womit man wieder
Eindeutigkeit bekommt), jedoch käme es dann auf die Reihenfolge
der Operanden an (was man eher nicht erwarten würde).

In jedem Fall ist obiger Code zu vermeiden.

Quote:
Wenn ich v.rend() ersetze durch das was im STL-Header-File für
rend() steht, dann funktioniert es auch.

Ich verstehe nicht, was das aussagen soll (und ich will es
vermutlich auch gar nicht wissen).

MfG

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
claus.hirth@swissonline.c
Guest





PostPosted: Sun Sep 07, 2003 5:21 am    Post subject: Re: vergleich const iterator mit v.end() Reply with quote



Quote:
In jedem Fall ist obiger Code zu vermeiden.

Durch was soll man ihn dann ersetzen? Ist damit auch
(1) gemeint?

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Markus Schaaf
Guest





PostPosted: Sun Sep 07, 2003 9:28 pm    Post subject: Re: vergleich const iterator mit v.end() Reply with quote

<claus.hirth (AT) swissonline (DOT) ch> schrieb:

Quote:
In jedem Fall ist obiger Code zu vermeiden.

Durch was soll man ihn dann ersetzen? Ist damit auch
(1) gemeint?

Nein. Habe ich auch nicht zitiert.

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.