Ich würde gerne wissen, wenn es möglich ist, einen Iterator zu einem Objekt in einem Container (z. B. std::vector<...>
) erhalten nur durch Zugriff auf das Objekt im Inneren des Containers, z. durch einen Verweis (was bedeutet, dass wir Zugriff auf einen Zeiger auf es mit dem &
-Operator haben). Zum Beispiel, in der Regel erklären wir einen Iterator alsErhalten Iterator von Zeiger oder Referenz
std::vector<int>::iterator = vec.begin();
oder
std::vector<int>::iterator = next(vec.begin(), idx);
aber im ersten Beispiel sind wir höchstwahrscheinlich etwa durch den Behälter, um zu durchlaufen, während im zweiten Beispiel, das wir kennen der Index des Objekts, das wir benötigen. Ich würde gerne wissen, ob wir den Iterator für ein Objekt erhalten können, ohne zu wissen, auf welchem Index es sich im Container befindet, aber ob wir eine Referenz oder einen Zeiger darauf haben, wie oben erklärt.
Es könnte scheinen, dass diese Frage bereits here gestellt worden ist, aber es scheint mehr wie die OP wollte andere seinen Code zu beheben, anstatt die allgemeine Frage zu beantworten, so dass die Antworten meiner Meinung nach nicht so zufriedenstellend sind. Auch scheint die Antwort here zu sagen, dass wir einen Iterator mit einem Konstruktor initialisieren können, wie weiter unten
gezeigtstd::vector<int>::iterator it(...);
aber ich habe nicht in der Lage gewesen, für die std :: Iterator-Klasse keine Beweise für einen Konstruktor zu finden in der offizielle Dokumentation (und ich konnte auch keine Dokumentation über std :: vector < ...> :: iterator finden), also bin ich vorsichtig, den oben gezeigten Konstruktor zu verwenden, auch wenn es kompiliert.
HINWEIS
Ich benutze std::vector
als Beispiel oben, sondern im Idealfall würde ich dies für jeden Behälter zu arbeiten, zum Beispiel std::list
oder std::deque
Sie können einen Index durchlaufen. 'vec.begin() + (pos- & vec [0])' –
@KonradKapp dann sollten Sie nach Fragen suchen, wie man den Index findet ;-) –
@dyp ja, tut mir leid, dass ich das erste Mal nicht klar bin. Ich habe der Frage eine Notiz hinzugefügt. Ich bevorzuge den Iterator, da ich ihn als Unterbrechungsbedingung in einer for-Schleife verwenden möchte. Aber das ist nebensächlich :) Die Frage ist allgemeiner, ob man einen Iterator auf diese Weise erhalten könnte (scheint aber etwas zu sein, was einfach sein sollte) –