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:
Gibt es einen Template-Trick, mit dem ich das erreichen könnte? Oder ist es schon irgendwo in Boost oder einer anderen Bibliothek gemacht?
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.
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.)
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.