vectoren zusammenfassen



  • Hallo zusammen

    ich habe mich gefragt ob es moeglich ist zwei vectoren in einem neuen zusammenzufassen ohne dass ich jedes element mit push_back einfuegen muss. also dass ich nachher sowas bekomme:
    vec a;
    vec b;
    vec c = (a,b); a und b aneinandergehaengt als neuer vector

    mache ich das mit insert(range) oder copy?



  • Sowas hier sollte gehen:

    std::vector<int> a(5, 1);
    std::vector<int> b(5, 2);
    
    std::vector<int> c( a);
    c.insert( c.end(), b.begin(), b.end();
    
    std::vector<int> d( b);
    d.insert( d.begin(), a.begin(), a.end();
    
    std::vector<int> e;
    e.assign( a.begin(), a.end());
    e.insert( e.end(), b.begin(), b.end();
    

    Alternativ kannst du auch std::copy und einen back_inserter benutzen. Ich würde aber vermuten, dass die range-Operationen performanter sind.



  • wow, das scheint mir aber nicht viel schoener und schneller zu gehen als einfach jedes element von vector a in vector b zu stecken. aber danke!



  • Schoen ist Ansichtssache. 😉

    Schneller sein sollte es durchaus, falls RandomAccess-Iteratoren benutzt werden (z.B. nackte Pointer oder Vektor-Iteratoren). Dann kann der Vektor im Voraus bestimmen, wieviel Speicher er reservieren muss und kann sich ständiges neu-allkoieren von Speicher beim Einfügen ersparen.

    Das macht sich aber erst so richtig bei vielen tausend Elementen bemerkbar.

    Edit: Vielleicht sollte die Betonung nochmal ein wenig auf das kann gelegt werden. Kein Implementierer der STL ist verpflichtet, so eine Spezialisierung einzubauen, es sei denn der Container schreibt die Komplexität auch genau so vor. Trotzdem haben sehr viele Implementationen solch ein Verhalten eingebaut.


Anmelden zum Antworten