Existe uma maneira padrão de mover um intervalo para um vetor?

Considere o seguinte programa que insere um intervalo de elementos em um vetor:

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

Isso copia eficientemente o intervalo, alocando espaço suficiente no vetor de destino para todo o intervalo, de modo que seja necessário o máximo de um redimensionamento. Agora considere o seguinte programa que tenta mover um intervalo para um vetor:

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

Isso realiza um movimento bem-sucedido, mas não aproveita os benefícios que o insert () possui em relação à pré-alocação de espaço no vetor de destino, de modo que o vetor pode ser redimensionado várias vezes durante a operação.

Então, minha pergunta é, existe um equivalente de inserção que pode mover um intervalo em um vetor?

questionAnswers(2)

yourAnswerToTheQuestion