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. 😉


Anmelden zum Antworten