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 

Iteratorfrage

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German)
View previous topic :: View next topic  
Author Message
René Möhring
Guest





PostPosted: Tue Dec 02, 2003 11:00 am    Post subject: Iteratorfrage Reply with quote



Kann man überprüfen ob ein Iterator (zB.: von std::map) gültig ist?
--
I'm not a racist, I hate everyone equally!

--
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
Stefan Reuther
Guest





PostPosted: Tue Dec 02, 2003 11:52 am    Post subject: Re: Iteratorfrage Reply with quote



René Möhring <myspammail1 (AT) gmx (DOT) de> wrote:
Quote:
Kann man überprüfen ob ein Iterator (zB.: von std::map) gültig ist?

Nein.

Ein ungültiger Iterator ist ungefähr das gleiche wie ein
'dangling pointer'. Theoretisch darfst du den nichtmal mit
irgendwas vergleichen (ähnlich wie ein delete'ter Zeiger eben).


Stefan, mit neuen Headern - mal schaun, ob's klappt

--
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: Tue Dec 02, 2003 1:30 pm    Post subject: Re: Iteratorfrage Reply with quote



"René Möhring" <myspammail1 (AT) gmx (DOT) de> schrieb:

Quote:
Kann man überprüfen ob ein Iterator (zB.: von std::map) gültig ist?

Gültig im Sinne von "liegt innerhalb eines bestimmten Bereichs"? Das
kann man für alle Kategorien ab Forward-Iterator auf die naive Art
testen:

template< class It >
bool IsIteratorInRange( It i, It b, It e ) {
bool r = false;
while( b != e && !( r = i == b ) ) ++b;
return r;
}

--
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
Werner Salomon
Guest





PostPosted: Tue Dec 02, 2003 9:04 pm    Post subject: Re: Iteratorfrage Reply with quote

René Möhring <myspammail1 (AT) gmx (DOT) de> wrote

Quote:
Kann man überprüfen ob ein Iterator (zB.: von std::map) gültig ist?

Hallo René,

kommt drauf an, was Du unter 'gültig' verstehst. Unter der Annahme,
dass Du den Iterator (z.B. 'i') bisher 'richtig' behandelt hast und er
von einer Container 'myCont' stammt, lässt sich mit

if( i != myCont.end() ) {
// ok: ++i und *i sind iO.
}
prüfen ob sich hinter 'i' noch ein Element befindet (*i) und der
Iterator noch inkrementierbar (++i) ist.
Ist der Container nicht mehr verfügbar - z.B. innerhalb eines
Unterprogramm(Algorithmus) so benötigt man neben 'i' noch eine Kopie
des Ende-Iterators (z.B. 'iEnde') desselben Containers.
if( i != iEnde ) {
// ok

Eine andere Möglichkeit ist lt. Standard nicht vorgesehen - und
braucht man i.A. auch nicht.

Gruß
Werner

--
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
René Möhring
Guest





PostPosted: Thu Dec 04, 2003 7:46 am    Post subject: Re: Iteratorfrage Reply with quote

Werner Salomon wrote:
Quote:
René Möhring <myspammail1 (AT) gmx (DOT) de> wrote

Kann man überprüfen ob ein Iterator (zB.: von std::map) gültig ist?

Hallo René,

kommt drauf an, was Du unter 'gültig' verstehst. Unter der Annahme,
dass Du den Iterator (z.B. 'i') bisher 'richtig' behandelt hast und er
von einer Container 'myCont' stammt, lässt sich mit

if( i != myCont.end() ) {
// ok: ++i und *i sind iO.
}
prüfen ob sich hinter 'i' noch ein Element befindet (*i) und der
Iterator noch inkrementierbar (++i) ist.
Ist der Container nicht mehr verfügbar - z.B. innerhalb eines
Unterprogramm(Algorithmus) so benötigt man neben 'i' noch eine Kopie
des Ende-Iterators (z.B. 'iEnde') desselben Containers.
if( i != iEnde ) {
// ok

Eine andere Möglichkeit ist lt. Standard nicht vorgesehen - und
braucht man i.A. auch nicht.

Ok, danke dann an alle Antortenden.
--
I'm not a racist, I hate everyone equally!

--
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.