Anfängerfrage zu Iteratoren
-
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.
-
Die Kernaussage ist einfach, dass man sich grundsätzlich nicht darauf verlassen kann. Natürlich haben die meisten Iteratoren intern Zeiger...
-
Es gibt Iteratoren, zu denen gibt es nicht einmal einen Container. Zum Beispiel wären Iteratoren denkbar, die Werte generieren. Da hast Du dann intern keine Zeiger, sondern einen Algorithmus zur Berechnung des nächsten Wertes.
Ich habe z.B. hier eine Funktion, die ein Iteratorpaar liefert, dass FIR-Tiefpasskoeffizienten berechnet, wenn man drüber iteriert. Da gibt es intern weder einen Zeiger, noch einen Container.
-
vector<bool>::iterator?
-
SeppJ schrieb:
vector<bool>::iterator?
Jo, das ist auch gut.
-
Ein Zeiger ist ein Iterator aber ein Iterator ist kein Zeiger.
Es wird manchmal falsch rum interpretiert. Insofern sind sie sich schon ähnlich, ein Zeiger ist nichts anderes als ein Spezialfall eines Iterators.
-
SeppJ schrieb:
vector<bool>::iterator?
ist kein Container. Meine Aussage galt fuer Container.
-
otze_logout schrieb:
SeppJ schrieb:
vector<bool>::iterator?
ist kein Container. Meine Aussage galt fuer Container.
Was ist für dich dann ein Container?
Aber OK, ich kann einen bitset Container implementieren der alle Anforderungen eines Containers entspricht...