 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
René Möhring Guest
|
Posted: Tue Dec 02, 2003 11:00 am Post subject: Iteratorfrage |
|
|
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
|
Posted: Tue Dec 02, 2003 11:52 am Post subject: Re: Iteratorfrage |
|
|
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
|
Posted: Tue Dec 02, 2003 1:30 pm Post subject: Re: Iteratorfrage |
|
|
"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
|
Posted: Tue Dec 02, 2003 9:04 pm Post subject: Re: Iteratorfrage |
|
|
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
|
Posted: Thu Dec 04, 2003 7:46 am Post subject: Re: Iteratorfrage |
|
|
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 |
|
 |
|
|
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
|
|