Daten eines vectors einem anderen vector zuweisen
-
Hallo, ich suche nach einer Möglichkeit um bestimmte Daten eines Vector einem andren zuzuweisen!
Hier mein Versuch, der funktioniert aber nicht:
struct MyData { int Data1; AnsiString Data2; MyData():Data1(0),Data2("") {} }; ... std::vector<MyData> vMyData1; for(int i=0; i<10; i++) { MyData DS; DS.Data1 = i; DS.Data2 = "Wert"+IntToStr(i); vMyData1.push_back(DS); } std::vector<MyData> vMyData2; for( std::vector<MyData1>::iterator i = vMyData1.begin(); i != vMyData1.end(); i++ ) { if(i->Data1 > 5) vMyData2.push_back(i); // Geht so nicht ;( }Folgende Vorgehensweise funktioniert zwar ist aber zu umständlich:
for( std::vector<MyData1>::iterator i = vMyData1.begin(); i != vMyData1.end(); i++ ) { if(i->Data1 > 5) { MyData DS; DS.Data1 = i->Data1; DS.Data2 = i->Data2; vMyData2.push_back(DS); } }Hat jemand eine Idee wie ich das elegant gestalten könnte?
-
Grundsätzlich sollte nichts einzuwenden sein gegen:
vMyData2 = vMyData1;In Deiner Schleife im ersten Versuch müsstest Du noch den Iterator dereferenzieren.
-
std::vector<MyData> vMyData2(vMyData1); spricht auch nichts gegen

-
Bloß das er ja nicht alle Daten in seinem neuen vector haben will. Hier könnte man z.Bsp. remove_copy_if verwenden.
-
Danke für die beiden Antworten, aber Ihr habt da was übersehen:
Es werden nicht alle Daten des ersten Vectors in das zweite Vector übernommen, daher brauche ich einen Vorschlag wie ich ein Datensatz eines Vectors in ein anderes Vector übernehmen kann.
Hat da wer eine Idee?
-
delphisual schrieb:
Hallo, ich suche nach einer Möglichkeit um bestimmte Daten eines Vector einem andren zuzuweisen!
Hier mein Versuch, der funktioniert aber nicht:
std::vector<MyData> vMyData2; for( std::vector<MyData1>::iterator i = vMyData1.begin(); i != vMyData1.end(); i++ ) { if(i->Data1 > 5) vMyData2.push_back(i); // Geht so nicht ;( }geht schon, bloß die Syntax passt nicht. Richtig ist:
std::vector<MyData> vMyData2; for( std::vector<MyData>::iterator i = vMyData1.begin(); i != MyData1.end(); ++i ) { if(i->Data1 > 5) vMyData2.push_back( *i ); // Geht doch :-) }Die "Profi-Methode" - mit Hilfe von boost - wäre dann:
std::vector<MyData> vMyData2; remove_copy_if( vMyData1.begin(), vMyData1.end(), back_inserter( vMyData2 ), boost::bind( &MyData::Data1, _1 ) <= 5 );Gruß
Werner
-
Vielen Dank Werner Salomon, deine Beispiele sind so was von Volltreffer, die werden mir demnächst sehr viel Arbeit ersparen.
Bestens
