Iterator "zeigt" auf ein Mitglied eines Objekts

7

Ich gebe zu, ich hatte Schwierigkeiten, eine vernünftige Beschreibung dafür zu finden. Ich kann mir keinen Begriff vorstellen, der genau beschreiben würde, wonach ich suche. Vielleicht könnte dies ein Slicing-Iterator genannt werden.

Sagen wir, ich habe so etwas:

%Vor%

Was ich suche, ist eine Möglichkeit, einen Iterator zu erstellen, der auf ein Mitglied von S verweist. Ich möchte in der Lage sein, es an etwas wie std::min_element zu übergeben, ohne jeweils ein Prädikat zu erstellen. Etwas, das wie folgt aussehen könnte:

%Vor%

Gibt es einen Template-Trick, mit dem ich das erreichen könnte? Oder ist es schon irgendwo in Boost oder einer anderen Bibliothek gemacht?

    
detunized 29.04.2011, 10:49
quelle

4 Antworten

13

Wenn Sie nach einem Iterator suchen, der S in sein S :: f konvertiert, könnte dies sicherlich mit boost geschehen (was nicht sein kann?):

%Vor%

test: Ссылка

Aber wenn Sie nach dem S suchen, dessen S :: f der kleinste im Vektor ist, ist das Prädikat der vernünftigste Ansatz.

    
Cubbi 29.04.2011, 11:07
quelle
2

Wenn Sie keine Prädikatfunktion für jeden Fall erstellen möchten, würde ich vorschlagen, nicht nach einem Slicing-Operator zu suchen, sondern Ihr Prädikat als Lambda-Funktion zu implementieren (entweder mit Boost oder C ++ 0x). Hier finden Sie eine detaillierte Erklärung

Ссылка

(das ist ungefähr std::sort , aber der Vergleich in std::min_element funktioniert gleich.)

    
Doc Brown 29.04.2011 11:11
quelle
2

Wird so etwas funktionieren?

%Vor%     
Stuart Golodetz 29.04.2011 11:26
quelle
2

Zusätzlich zu dem, was bereits vorgeschlagen wurde, können Sie es fast genauso machen wie Ihr Code-Beispiel.

Beispiel:

%Vor%

Zuerst habe ich nicht bemerkt - es sieht ähnlich aus wie @ Stuart Golodetz vorgeschlagen, aber der Vorteil ist, dass Operator & lt; muss nicht für den Iteratortyp definiert sein (z. B. std :: list :: iterator). Es macht diese Implementierung universell.

    
Serge Dundich 29.04.2011 13:01
quelle

Tags und Links