std::list<> zu einem Iteratort springen?
-
Hallo,
eine lieste enthält XXX Objekte, nun habe ich einen Zeiger auf irgendeins
dieser XXX objekte, kann ich über diesen Zeiger auf den entsprechenden
Iterator des Listenobjektes springen?
-
du meinst sowas wie?
T *p; // gedöns list<T>::iterator iter = besorgMirNenIterator(p);glaub kaum, dass das möglich ist. dem element einer liste und einem pointer auf so ein element fehlt schlicht der nötige kontext.
-
wieso? es könnte doch ne funktion geben welche die liste iteriert, bis der inhalt bzw. desen adresse im speicher meinem zeiger übereinstimmt;)
-
Dir wird nichts anderes übrigbleiben als zu suchen:
T *p; for (list<T>::iterator iter = l.begin(); iter != l.end(); ++iter) { if (&*iter == p) break; }BorisDieKlinge schrieb:
wieso? es könnte doch ne funktion geben welche die liste iteriert, bis der inhalt bzw. desen adresse im speicher meinem zeiger übereinstimmt;)
Du könntest auch statt Zeiger zu speichern das "Zeigerersatzkonzept" der Iteratoren konsequent umsetzen

-
find_if
-
Braunstein schrieb:
find_if
Wie sucht man damit ein T* in einer list<T>?
find_if( l.begin(), l.end(), bind( equal_to< T* >(), bind( &addressof, _1 ), p ) )Sorry, was eleganteres fällt mir nicht ein. Und bevor ich das so löse, würde ich lieber Iteratoren statt Zeigern sammeln...