Arbeiten mit der STL
-
std::for_each ( begin, end, [] (Power const& p) { if(foo) bar; } );
-
EinUnreg schrieb:
Ich habe ein Struct und einen Vector
struct Power { unsigned time; unsigned int amount; }; std::vector<Power> vPower;Wie kann ich jetzt im "C++ mit STL"-Stil herausfinden welche vectoreinträge zwischen zwei Zeiten timeStart und timeEnd liegen?
Und dann? Was soll denn das Ergebnis sein? Ein neuer Vektor mit Indizes?
-
krümelkacker schrieb:
EinUnreg schrieb:
Ich habe ein Struct und einen Vector
struct Power { unsigned time; unsigned int amount; }; std::vector<Power> vPower;Wie kann ich jetzt im "C++ mit STL"-Stil herausfinden welche vectoreinträge zwischen zwei Zeiten timeStart und timeEnd liegen?
Und dann? Was soll denn das Ergebnis sein? Ein neuer Vektor mit Indizes?
Schaetze mal genau diese "Power" Objekte die zwischen den Zeitspannen liegen.
-
Glaube er will das hier haben:
std::vector<Power> vPower; std::vector<Power> results; std::copy_if ( std::begin(vPower) , std::end(vPower) , std::back_inserter_iterator<std::vector<Power>>(results), [] (Power const& p) { if(foo) bar; } );EDIT: Auf copy_if umgestellt, geht aber nur mit dem neuen Standard. Aber du kannst dir auch fix dein eigenen copy_if Algo schreiben.
-
Danke für die Beiträge. Ja, ich wollte die Einträge in einem neuem Vector haben. Ich finde die STL ist gewöhnungsbedürftig, vieleicht liegt's auch nur daran, dass alles so neu ist.
-
Nimm std::back_inserter, so sparst du dir das Template-Argument.
-
EinUnreg schrieb:
Danke für die Beiträge. Ja, ich wollte die Einträge in einem neuem Vector haben.
Dann copy_if (ist zwar genau genommen C++11, können aber viele ältere Compiler auch. Außerdem sollte man C++11 so langsam voraussetzen dürfen). Lies dir am besten mal eine Übersicht über die ganzen Algorithms durch, es gibt so viele:
http://en.cppreference.com/w/cpp/algorithm
-
Gibt es eigentlich Pläne in einem zukünftigen C++-Standard auch eine Art LINQ wie in C# einzubauen?
var results = from vPower p where p.time >= timeStart and p.time <= timeEnd select p;Finde ich persönlich wesentlich schöner.
MfG SideWinder
-
SideWinder schrieb:
Gibt es eigentlich Pläne in einem zukünftigen C++-Standard auch eine Art LINQ wie in C# einzubauen?
var results = from vPower p where p.time >= timeStart and p.time <= timeEnd select p;Finde ich persönlich wesentlich schöner.
MfG SideWinder
Ich bin mir nicht sicher ob es in all zu kurzer Zeit einen neuen Standard geben wird
Mal davon abgesehen das es schoener ist 
-
Mit C++2X könnte das so aussehen:
auto results = std::make_filter_range( [](Power const& p){ return p.time >= timeStart && p.time <= timeEnd; }, vPower);Stroustrup wollte ja so etwas wie Ranges unterstützen. Ein Sprachfeature wie LINQ würde nur die Sprache überladen.