Iterator aus dem Index eines Elements bekommen



  • Kann man irgendwie den Iterator zu einem bestimmten Element bekommen, ohne die find()-Funktion zu benutzen?



  • gar nicht.



  • Wenn du sagst, nach welchem Kriterium du vorgehen willst, villeicht.



  • Was meinst Du mit Kriterien???
    Ich habe einen deque-Container, der Zeiger auf Objekte enthält, und für bestimmte Funktionen wie zum Beispiel erase() braucht man den Iterator um das Element zu löschen, mir steht allerdings nur die Position des Elements zur Verfügung. Deshalb schein mir find() nicht effizient genug zu sein. Ich könnte zwar auch den Iterator von begin() bis zum Index um 1 erhöhen. Gibt es nicht schon etwas "fertiges", das zum Beispiel mit der Pointer-Arithmetik arbeitet, was etwas schneller ist, da man dort nur eine Addition durchführen muss. Wenn nicht, dann wie kann man auf das gekapselte Array zugreifen, oder werden die Elemente intern in verketteter Liste gespeichert?



  • jup du kannst auf einen deque iterator addieren, es gibt aber auch die funktion advance (aus <iterator>) die funktioniert sogar bei list iteratoren (mit hilfe von op++)
    jetzt ist die frage ob advance so spezialiesiert ist das es bei random_acces_iteratoren (z.b. deque iterator) einfach addiert, zu zeit würde ich mich nicht drauf verlassen, bei neuen stl implementierungen sollte das aber der fall sein



  • Danke, erstmal für die Antworten. Ich werde es dann morgen ausprobieren ob es bei mir mit advance() funktioniert.
    Noch eine Frage bleibt dann noch übrig: Erhöht advance() per Schleife den Iterator oder arbeitet es irgendwie anders?



  • erase(d.begin() + index);



  • bIce schrieb:

    Noch eine Frage bleibt dann noch übrig: Erhöht advance() per Schleife den Iterator oder arbeitet es irgendwie anders?

    bei std::list bestimt per schleife, bei deque ist es eine frage der qualität der stl implementierung, ka wie viele stl implementierung da ein unterschied machen,

    aber bei deque würde ich das was eraserr gepostet hatt benutzen, den durch advance hättes du zwar den vorteil das du statt deque auch ein list einsetzen könntest, aber es ist irgend wie falsch desingt wenn man mit hilfe von advance aus einer list ein random acces container macht


Anmelden zum Antworten