¿Hay una manera estándar de mover un rango en un vector?

Considere el siguiente programa que inserta un rango de elementos en un vector:

vector<string> v1;
vector<string> v2;

v1.push_back("one");
v1.push_back("two");
v1.push_back("three");

v2.push_back("four");
v2.push_back("five");
v2.push_back("six");

v1.insert(v1.end(), v2.begin(), v2.end());

Esto copia de manera eficiente el rango, asignando suficiente espacio en el vector objetivo para todo el rango, de modo que se requerirá un máximo de un cambio de tamaño. Ahora considere el siguiente programa que intenta mover un rango a un vector:

vector<string> v1;
vector<string> v2;

v1.push_back("one");
v1.push_back("two");
v1.push_back("three");

v2.push_back("four");
v2.push_back("five");
v2.push_back("six");

for_each ( v2.begin(), v2.end(), [&v1]( string & s )
{
    v1.emplace_back(std::move(s));
});

Esto realiza un movimiento exitoso pero no disfruta de los beneficios que tiene insert () con respecto a la preasignación del espacio en el vector objetivo, por lo que el vector podría redimensionarse varias veces durante la operación.

Así que mi pregunta es, ¿hay un inserto equivalente que pueda mover un rango a un vector?

Respuestas a la pregunta(2)

Su respuesta a la pregunta