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));
-
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
-
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.