boost::ptr_map und erase durch iterator
-
Servus,
meine Problem ist einfach:
Durch eine Pointer Map durchiterieren, checken ob eine bestimmte bedingung erfüllt ist, und wenn nicht, den Eintrag aus der Map löschen.Intuitiver Ansatz:
for( boost::ptr_map<long, Foo>::iterator i = map.begin(), e = map.end() ; i!=e ; i++) { if (i->second->isInvalid()) map.erase(i); }Jetzt weiß ich nicht, ob der iterator duch das erase() invalidiert wird und somit der nächste ++-Aufruf undefiniert sein könnte. ptr_map::erase gibt void zurück, und keinen neuen Iterator.
Wie kann ich sicherstellen, dass das funktioniert?
Gruß,
Phil
-
typedef boost::ptr_map<long, Foo> FooMap; for( FooMap::iterator i = map.begin(), e = map.end() ; i!=e ; /* nichts */) { if (i->second->isInvalid()) map.erase(i++); else ++i; }Das Typedef kann ich nebenbei nur empfehlen (an einem sinnvollen Ort, z.B. in der Klassendefinition).

-
Ahh okay, es funktioniert also genau analog zu std::map.
Habe gerade meinen alten Forumsbeitrag dazu gefunden, da hatte ich wohl dasselbe Problem: http://www.c-plusplus.net/forum/viewtopic-var-t-is-243529.htmlDanke,
Phil