Funktion, die den Iterator in C ++ zurückgibt

7

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?

    
sufyan siddique 11.01.2012, 16:10
quelle

6 Antworten

12

Dies bringt einen Iterator an den Anfang von types :

zurück %Vor%

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:

%Vor%     
hmjd 11.01.2012 16:12
quelle
8

Sie möchten eine begin und end Methode:

%Vor%

Der Vollständigkeit halber sollten Sie auch const versions

haben %Vor%     
Sean 11.01.2012 16:14
quelle
3

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.

%Vor%     
Johannes Schaub - litb 11.01.2012 16:20
quelle
2

Das Zurückgeben eines Iterators ist einfach. Zum Beispiel können Sie den ersten Iterator in den Vektortypen zurückgeben:

%Vor%

Java vs. C ++

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.

Lass uns iterieren!

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%

C ++ 11 Version

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.

    
paercebal 11.01.2012 16:33
quelle
1

Wenn man annimmt, dass Typen ein Attribut der Klasse Union ist, ist eine nette, STL-konforme Methode, dies zu handhaben,

%Vor%     
ravenspoint 11.01.2012 16:18
quelle
0

Sie können es wie folgt tun

%Vor%     
Chethan Ravindranath 11.01.2012 16:13
quelle

Tags und Links