Concatenando dos std :: vector: ¿qué método es más eficiente y cómo / por qué?

Considere el siguiente escenario:

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

yo quieroAB tener contenidos deA y luego el contenido deB en el mismo orden.

Enfoque 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() );

Enfoque 2:

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

¿Cuál de los métodos anteriores es más eficiente? ¿Por qué? ¿Existe un método diferente que sea más eficiente?

Respuestas a la pregunta(3)

Su respuesta a la pregunta