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


Anmelden zum Antworten