000
11.09.2018, 11:26 Uhr
karl_cpp
|
Hallo,
Ich habe eine Liste (Ursprungsliste) mit eigenen Objekten. Alle Objekte, die eine bestimmte Eigenschaft haben, möchte ich in eine andere Liste (Zielliste), gleichen Typs, verschieben. D.h., wenn die Ursprungsliste beispielsweise 10 Objekte hat, von denen 4 die gewünschte Eigenschaft besitzen, dann soll danach die Zielliste 4 Einträge haben und die Ursprungsliste 6 Einträge.
C++: |
std::list<MyObj> source; // Hat bereits Einträge std::list<MyObj> target; // Ist noch leer
for( MyObj & obj : source ) { // Wenn das Objekt die gewünschte Eigenschaft hat... if( obj.hasProperty() ) { // ...dann in die Zielliste verschieben target.push_back( std::move( obj ) ); } }
|
Dieser Ansatz funktioniert leider nicht. In der Zielliste sind zwar die gewünschten Objekte, aber in der Ursprungsliste sind die Objekte auch noch enthalten. Kann mir jemand sagen, was ich da falsch mache? Ich dachte, "move" verschiebt die Objekte?
Dieser Ansatz funktioniert, ist aber "umständlicher":
C++: |
std::list<MyObj> source; // Hat bereits Einträge std::list<MyObj> target; // Ist noch leer
size_t num = source.size(); for( int i = 0; i < num; ++i ) { // Objekt aus der Ursprungsliste herausholen MyObj obj = source.front(); source.pop_front();
// Wenn das Objekt die gewüschte Eigenschaft hat... if( obj.hasProperty() ) { // ...dann in die Zielliste einfügen target.push_back( obj ); } else { // ...sonst zurück in die Ursprungsliste source.push_back( obj ); } }
|
|