2016-06-09 8 views
-4

Stimmt es, dass der Index eine Memberfunktion ist, die den Wert eines Elements in einem Container zurückgeben kann, und ein Iterator ein Wert ist, der auf einen Container zugreifen, ihn durchlaufen und sich durch diesen bewegen kann?Der Unterschied zwischen Index und einem Iterator ist?

Antwort

1

Ein Index (oder Schlüssel) wird verwendet, um Daten in einem Container nachzuschlagen. Der einfachste Fall wären die Ganzzahlindizes eines Arrays, aber Container wie std::map können fast jeden Typ als Index haben.

Ein Iterator ist eine Klasse, die eine Position in einem Container darstellt. Sie erhalten möglicherweise Zugriff auf einen Container mit einem Index/Schlüssel, z. B. iterator std::map::find(const Key& key).

Iteratoren und Indizes sind in der Tat eher tangential verwandte Konzepte. Ein Index allein ermöglicht es Ihnen nicht, auf die Daten des Containers in irgendeiner Weise zuzugreifen, Sie müssen eine Funktion aus dem Container aufrufen, wie der Subscript-Operator ([]) oder find().

Ein Iterator kann jedoch mit * oder -> "dereferenziert" werden, auch wenn Sie keinen Zugriff mehr auf den ursprünglichen Container haben. Manchmal werden Iteratoren in C++ ohne den zugehörigen Container weitergegeben. Sie können auch (abhängig vom Container) inkrementiert und/oder dekrementiert werden.


Viele Leute verwenden die Begriffe "Schlüssel" und "Index" austauschbar, mich eingeschlossen. Dies ist je nach Kontext möglicherweise nicht völlig angemessen, aber sie sind im Allgemeinen ein äquivalentes Konzept.

+0

Ein Index wird also verwendet, um die Daten im Container nachzuschlagen, kann aber nicht selbst Daten im Container nachschlagen? Was macht ein Index an sich? Ein Iterator ist eine Klasse, aber ein Index ist? – Dog

+0

@Dog Ein Index kann alles sein (für einige Container); aber es hat nichts mit dem Container zu tun. Wieder mit Arrays: Der Index ist eine ganze Zahl. So können Sie auf ein Element eines Arrays mit 'x' zugreifen, das' int x = 10; 'hat, aber' x' allein hat keine Verbindung zu den Daten; nur 'array [x]' tut es. Iteratoren tragen ihre Verbindung zum Container mit sich. –

Verwandte Themen