Gegeben ein std::vector
, das Objekte von MyClass enthält. Wie kann ich mit std::copy
einen anderen Vektor erstellen, der nur Daten eines Mitglieds von MyClass enthält? Ich denke, ich müsste eine benutzerdefinierte back_inserter
implementieren, aber ich konnte bisher nicht herausfinden, wie das geht.
Verwenden Sie std::transform
dafür.
(Wenn Sie C ++ 11 nicht verwenden können, könnten Sie selbst ein Funktionsobjekt erstellen:
%Vor% oder verwenden Sie std::tr1::bind
, wenn Sie TR1 verwenden können:
BTW, wie @Nawaz unten kommentierte, macht .reserve()
, um unnötige Neuzuweisung während des Kopierens zu verhindern.
Sie möchten std::transform
nicht std::copy
und std::bind
verwenden, um an einen Zeiger auf eine Elementvariable zu binden:
Mein Beispiel ist C ++ 11, aber wenn Sie die praktische Vektorinitialisierung überspringen und stattdessen boost::bind
verwenden, funktioniert das auch ohne C ++ 11.