Benutzerdefinierter Inserter für std :: copy

7

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.

%Vor%     
Nils 27.07.2012, 11:25
quelle

2 Antworten

15

Verwenden Sie std::transform dafür.

%Vor%

(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:

%Vor%

BTW, wie @Nawaz unten kommentierte, macht .reserve() , um unnötige Neuzuweisung während des Kopierens zu verhindern.

%Vor%     
kennytm 27.07.2012, 11:36
quelle
4

Sie möchten std::transform nicht std::copy und std::bind verwenden, um an einen Zeiger auf eine Elementvariable zu binden:

%Vor%

Mein Beispiel ist C ++ 11, aber wenn Sie die praktische Vektorinitialisierung überspringen und stattdessen boost::bind verwenden, funktioniert das auch ohne C ++ 11.

    
Flexo 27.07.2012 11:39
quelle

Tags und Links