Concatenating two std :: vector - welche Methode ist effizienter und wie / warum?

Betrachten Sie das folgende Szenario:

std::vector<int> A;
std::vector<int> B;
std::vector<int> AB;

Ich möchteAB um Inhalte von @ zu habA und dann der Inhalt vonB in der gleichen Reihenfolge

Ansatz 1:

AB.reserve( A.size() + B.size() ); // preallocate memory
AB.insert( AB.end(), A.begin(), A.end() );
AB.insert( AB.end(), B.begin(), B.end() );

Ansatz 2:

std::vector<int> AB ( A.begin(), A.end() ); // calling constructor
AB.insert ( AB.end(), B.begin(), B.end() );

Welche der oben genannten Methoden ist effizienter? Warum? Gibt es eine andere Methode, die effizienter ist?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage