Anfängerfrage zu Iteratoren
-
Hey rüdiger,
erstmal danke für Deine Antwort!
zu 2) Das mit der "echten Gleichheit" verstehe ich nicht ganz.. sorry.

In meiner Quelle steht das wie folgt drinnen: "Ausgabeiteratoren unterstüzen keinen Vergleich"zu 3) Ich habe irgendwo gelesen, dass ein Iterator das gleiche wie ein Pointer ist. Stimmt das so, kann man das so sagen?
Der Vergleich von i und v.end() ist dann immer falsch, wenn die beiden Zeiger (sind ja zwei Iteratoren) auf unterschiedliche Stellen zeigen. Sonst true.
Ist das so richtig, oder hab ich irgendwo ein Denkfehler drinnen?
Vielen Dank!!
-
blub85 schrieb:
zu 2) Das mit der "echten Gleichheit" verstehe ich nicht ganz.. sorry.

In meiner Quelle steht das wie folgt drinnen: "Ausgabeiteratoren unterstüzen keinen Vergleich"Echte Gleichheit:
int a(4) b(a);Hier wird
aimmer gleichbbleiben, solange alle Rechenoperationen immer auf beiden ausgeführt werden. .. (Edit: erschließe ich aus dem Kontext)
Und wie immer ist Google dein bester Freund.blub85 schrieb:
zu 3) Ich habe irgendwo gelesen, dass ein Iterator das gleiche wie ein Pointer ist. Stimmt das so, kann man das so sagen?
Ney. Ein Iterator hält intern als einzige Variable einen Pointer, um den er einen Container-spezifischen Wrapper bildet. Einen Iterator zu inkrementieren heißt bei einer verketten Liste, den Zeiger auf den Knoten seinem Nachfolger zuzuweisen; bei einem statischen Array heißt es einfach den Zeiger zu inkrementieren, usw,
-
Hacker schrieb:
Ein Iterator hält intern als einzige Variable einen Pointer
Muss nicht sein.
Hacker schrieb:
...
Bla bla bla, das sind irrelevante Details. Das Iterator-Konzept ist eine generalisierung von Zeigern, nichts weiter.
-
314159265358979 schrieb:
Hacker schrieb:
Ein Iterator hält intern als einzige Variable einen Pointer
Muss nicht sein.
Was braucht ein Iterator denn noch?
-
Hacker schrieb:
314159265358979 schrieb:
Hacker schrieb:
Ein Iterator hält intern als einzige Variable einen Pointer
Muss nicht sein.
Was braucht ein Iterator denn noch?
Ein Zeiger ist auch ein gültiger Iterator. Ein Iterator muss nicht intern einen Pointer halten.
-
pyhax schrieb:
Hacker schrieb:
314159265358979 schrieb:
Hacker schrieb:
Ein Iterator hält intern als einzige Variable einen Pointer
Muss nicht sein.
Was braucht ein Iterator denn noch?
Ein Zeiger ist auch ein gültiger Iterator.
Natürlich, natürlich. Aber ich bezog mich auf die Iteratoren in den Containern, nicht in C-Arrays o. ä.-
-
z.b. zusätzliche Member für Checks im Debugmodus o.ä.
-
314159265358979 schrieb:
z.b. zusätzliche Member für Checks im Debugmodus o.ä.
-.-
VERDAMMT NOCH MAL. Die sind doch nichts essentielles von einem Iterator.
-
Aber im Releasemodus ist auch std::vector::iterator manchmal ein einfaches typedef auf T* ...
-
pyhax schrieb:
Aber im Releasemodus ist auch std::vector::iterator manchmal ein einfaches typedef auf T* ...
Ja na klar, weil es da keinen Unterschied macht -.-
Wie gesagt, ein Iterator ist ein Wrapper um einen Zeiger. Wenn die überladenen Operatoren dann sowieso das gleiche tun wie die eines Zeigers, wozu brauchst du dann noch einen Wrapper?
-
Hacker schrieb:
Wie gesagt, ein Iterator ist ein Wrapper um einen Zeiger.
Nein, das ist einfach grundsätzlich falsch.
-
314159265358979 schrieb:
Hacker schrieb:
Wie gesagt, ein Iterator ist ein Wrapper um einen Zeiger.
Nein, das ist einfach grundsätzlich falsch.
Erklär'.
-
Du kannst zb. einen Iterator schreiben, der zeilenweise aus einer Datei liest. Der Iterator müsste zb einen Stream halten.
Oder ein Beispiel aus einem meiner Projekte: https://github.com/Ethon/Berry/blob/master/include/berry/process_iterator.hpp
Hat mit nem Pointer nichtmehr soviel zu tun.
-
Ethon schrieb:
Du kannst zb. einen Iterator schreiben, der zeilenweise aus einer Datei liest. Der Iterator müsste zb einen Stream halten.
Oder ein Beispiel aus einem meiner Projekte: https://github.com/Ethon/Berry/blob/master/include/berry/process_iterator.hpp
Hat mit nem Pointer nichtmehr soviel zu tun.
Naja klar, ich kenn ja auch ostream_iterator oder den Boost-Iterator für Datums-iteration.
Gut, wenn man so allgemein über Iteratoren spricht...
Ich dachte eben der TE bezog sich mit dem Satz auf Container-Iteratoren.
-
Auch Container-Iteratoren müssen nicht Zwangsweise einen Zeiger haben. Ein std::vector::iterator könnte beispielsweise eine Referenz auf den vector sowie einen Index halten.
-
314159265358979 schrieb:
Auch Container-Iteratoren müssen nicht Zwangsweise einen Zeiger haben. Ein std::vector::iterator könnte beispielsweise eine Referenz auf den vector sowie einen Index halten.
-
Ach vergiss es, ich gebs auf. Du bist zu blöd dazu. Ich kann dir meine Meinung so offensichtlich wie ich will in X Posts darlegen und du willst es trotzdem nicht kapieren. Vergiss es einfach, okay?
-
314159265358979 schrieb:
Ach vergiss es, ich gebs auf. Du bist zu blöd dazu. Ich kann dir meine Meinung so offensichtlich wie ich will in X Posts darlegen und du willst es trotzdem nicht kapieren. Vergiss es einfach, okay?
Sry, aber wenn ein Iterator sowas machen würde, das ... wäre einfach Dumm.
-
Nö. Für den Debugmodus durchaus brauchbar. Du hast einfach keine Ahnung, also stfu. <.<
-
seid ihr euch immer noch am beleidigen wie Kleinkinder?

Und in der Tat kann man sagen, dass ein Iterator für Container nicht mehr als ein Wrapper um einen zeiger ist. Ob man ihn als "ref aufs erste Element/container + uint" oder "ref auf speicherzelle darstellt" ist ziemlich egal, da das äquivalente Darstellungen sind. Fakt ist, dass bei einem Container hinter dem was von einem Iterator referenziert wird eine echte Speicherstelle stecken muss. Von daher sind nicht so viele Darstellungen möglich.
Pi darf in dem Zusammenhang noch zeigen wie sein "container ref + unsigned int" noch die Anforderungen eines Iterators (operator=) erfüllt, also ohne das aus der container ref ein Zeiger wird.