vector in Schleife mit structs befülllen
-
Hallo zusammen,
mir fehlt leider die Syntax für mein im Titel geschildertes Vorhaben. Zwar kompiliert der Code, doch erhalte ich eine Warnung, die mir sagt, dass es so nur in C++0x funktioniert. Wie lautet denn der herkömmliche Code?
struct pixelIndex { unsigned char value; int x; int y; }; //... vector<pixelIndex> sorted; for(int i = 0; i < pData.size(); i++) { sorted.push_back(pixelIndex {pData[i], i, 0}); }Danke
-
Für C++11 kann man sogar schreiben:
for(int i = 0; i < pData.size(); i++) { sorted.push_back({pData[i], i, 0}); }Wobei die "herkömmliche" Variante die hier ist:
for(int i = 0; i < pData.size(); i++) { pixelIndex pi = {pData[i], i, 0}; sorted.push_back(pi); }Oder du schreibst einen entsprechenden Konstruktor für pixelIndex und tauschst {} durch (). Allerdings wüsste ich nicht, warum man C++11 Features nicht nutzen sollte, wenn dein Compiler die bereits unterstützt. Gibt's da spezielle Gründe? Portabel ist der Code letztlich trotzdem, spätestens in 3-6 Monaten werden wohl alle großen Compiler dieses Feature unterstützen.
-
cooky451 schrieb:
Für C++11 kann man sogar schreiben:
for(int i = 0; i < pData.size(); i++) { sorted.push_back({pData[i], i, 0}); }Also ich mag eher das hier:
for (int i : range(pData.size()) sorted.emplace_back(pData[i], i, 0);So eine
range-Klasse hat vermutlich jeder, der öfters mit C++11 programmiert.
-
Ui ja, emplace ist natürlich schöner, gar nicht dran gedacht.
Streng genommen halt auch C++11, aber das Feature sollte bereits jetzt jeder aktuelle Compiler haben. - Das mit der Range-Klasse.. ich lass mich davon überzeugen wenn ich weiß, wie gut Compiler das optimieren. 