Es folgt eine Java-Methode, die einen Iterator zurückgibt
%Vor%Ich möchte diesen Code in C ++ übersetzen. Wie kann ich einen Iterator des Vektors von dieser Methode zurückgeben?
Dies bringt einen Iterator an den Anfang von types
:
Der Aufrufer muss jedoch auch die end()
von Vektor types
kennen.
Java Iterator
hat eine Methode hasNext()
: Diese existiert nicht in C ++.
Sie könnten Union::types()
ändern, um einen Bereich zurückzugeben:
Eine Gewerkschaft ist ein Container ihrer Mitglieder. Ich würde begin
und end
verwenden, um dem ersten bzw. letzten Mitglied Iteratoren zurückzugeben.
Die Liste der Typen ist nicht die primäre iterierbare Eigenschaft einer Union. Also würde ich selbst das Folgende verwenden und die Ebenen begin
und end
für die Mitgliedsdaten selbst reservieren.
Das Zurückgeben eines Iterators ist einfach. Zum Beispiel können Sie den ersten Iterator in den Vektortypen zurückgeben:
%Vor%Aber C ++ - Iteratoren sind keine Java-Iteratoren: Sie werden nicht auf die gleiche Weise verwendet.
In Java (IIRC) haben Sie mehr wie einen Enumerator, das heißt, Sie verwenden die Methode "next", um von einem Element zum nächsten zu iterieren. Daher reicht die Rückgabe des Java-Iterators aus, um von Anfang bis Ende zu iterieren.
In C ++ soll der Iterator sich wie ein Superzeiger verhalten. Daher "zeigt" es normalerweise auf den Wert, und mit dem Operator ++, - usw. (abhängig vom genauen Typ des Iterators) können Sie den Iterator auf "Punkt" zum nächsten, vorherigen usw. bewegen Wert im Container.
Normalerweise möchten Sie vom Anfang bis zum Ende iterieren.
Dazu müssen Sie entweder die gesamte Sammlung (als "const", wenn Sie es nur lesen möchten) zurückgeben und den Benutzer so durchlaufen lassen, wie er / sie möchte.
Oder Sie können zwei Iteratoren zurückgeben, einen für den Anfang und einen für das Ende. So könnte man haben:
%Vor%Und das, Sie können von Anfang bis Ende iterieren, in C ++ 03:
%Vor%Wenn Sie den vollständigen Container anstelle von nur seinen Iteratoren angeben, wird es in C ++ 11 einfacher, da Sie die range-for-Schleife (als foreach in Java und C #) verwenden können:
%Vor%P.S .: Johannes Schaub - littb hat recht, wenn es möglich ist, den "const" -Kennzeichner zu verwenden. Ich tat es nicht, weil ich vermeiden wollte, den Code zu verdünnen, aber am Ende ist "const" dein Freund.
Wenn man annimmt, dass Typen ein Attribut der Klasse Union ist, ist eine nette, STL-konforme Methode, dies zu handhaben,
%Vor%