Umgang mit Iteratoren und Zeigern



  • Hallo,

    ich habe eine Frage zu Iteratoren des Containers <vector>.
    Hierzu seien z.B. folgende Definitionen vorausgesetzt:

    vector<TYP> vec;
    vector<TYP>::iterator vec_iter;
    TYP *tp;

    Der Zeiger tp zeige nun auf ein belieb. Element des Vektors vec.
    Mit welcher Methode kann ich nun den Iterator vec_iter genau auf dieses
    Element zeigen lassen?
    (Ich arbeite mit dem aktuellen GNU g++ Compiler).

    Für eine Antwort auf obige Frage wäre ich sehr dankbar!



  • Wahrscheinlich sowas:

    tp = &(*vec_iter);
    


  • Am sichersten so:

    vec_iter=find(vec.begin(), vec.end(),*tp);
    

    Da die Container Kopien der eingefügten Elemete anfertigen, wirst du wahrscheinlich keinen Zeiger auf das tatsächliche Element im Container haben (vermute ich)

    Nid



  • Besten Dank für die rasche Rückmeldung!!

    Leider funktioniert

    tp = &(*vec_iter);

    nicht, an das dachte ich auch zuerst.

    Bei

    vector<TYP>::iterator vec_iter(&(*vec_iter));

    bekomme ich keine Fehlermeldung!

    @Nidhogger:

    Kann ich dann mit

    vec.erase(vec_iter)

    dennoch ein Element löschen?



  • victim49 schrieb:

    @Nidhogger:

    Kann ich dann mit

    vec.erase(vec_iter)

    dennoch ein Element löschen?

    Ja, wenn es kein konstanter Vektor ist, kein Problem, allerdings:

    - Vorher prüfen, ob der Iterator nicht vec.end() ist, weil das Element nicht gefunden wurde.

    - Zwischen der Ermittlung des Iterators und dem Löschen keine anderen Umstrukturierungsmaßnahmen des Vektors vornehmen, da der Iterator sonst ungültig wird.

    Nid



  • Scheint zu klappen. 🙂
    Noch mal besten Dank für die Hilfe !!!!!!!


Anmelden zum Antworten