Alle Elemente eines Vektors an anderen Vektor anhängen



  • Frage steht eigentlich schon im Titel.
    Wie hänge ich alle Elemente eines Vektors an einen anderen Vektor an (möglichst performant, im alten Vektor werden die Elemente nicht mehr benötigt).

    Vektor 1: { 1, 2, 3, 4, 5 }
    Vektor 2: { 8, 2, 33, 4 }

    Anhängen ...

    Vektor 1: {}
    Vektor 2: { 8, 2, 33, 4, 1, 2, 3, 4, 5 }

    ... so in etwa.



  • Das kann man z.B. so machen:

    std::vector<int> a {1, 2, 3, 4, 5};
        std::vector<int> b {6, 7, 8, 9};
    
        std::copy(b.cbegin(), b.cend(), std::back_inserter(a));
    

  • Mod

    Ich nehme an, eine Kopie, kein move? Dann einfach ein entsprechendes insert, da kann man nicht groß tricksen.

    vector2.insert(vector2.end(), vector1.begin(), vector1.end());
    

    P.S.: Der Vorschlag mit dem copy über mir dürfte minimal langsamer sein. Das insert kann vorher feststellen, wie viele Elemente kommen und schon direkt passend allokieren. copy muss hier ein push_back nach dem anderen machen, mit möglicherweise mehreren Reallokationen.



  • Im vector sind nur primitive Datentypen (int, char ...), von daher wäre da ein move performanter?

    Ansonsten danke 👍


  • Mod

    retojkklk schrieb:

    Im vector sind nur primitive Datentypen (int, char ...), von daher wäre da ein move performanter?

    Nein. Das ist genau der Fall, wo das egal ist.



  • Es gibt im schlimmsten Fall eine reallocation und vector1.size()+vector2.size() Verschiebeoperationen, die für die primitiven Datentypen mit memcpy/memmove ausgeführt wird. Viel schneller geht das nicht.
    Wenn du schon vorher weißt, wie groß die Einzelvektoren sein werden, kannst du rechtzeitig genug Speicher reservieren.


Anmelden zum Antworten