Рассмотрим следующую программу, которая вставляет диапазон элементов в вектор:
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());
Это эффективно копирует диапазон, выделяя достаточное пространство в целевом векторе для всего диапазона, чтобы потребовалось не более одного изменения размера. Теперь рассмотрим следующую программу, которая пытается переместить диапазон в вектор:
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));
});
Выполняет успешный ход, но не обладает преимуществами, которые insert() имеет в отношении предварительного распределения места в целевом векторе, поэтому вектор может быть изменен несколько раз во время операции.
Итак, мой вопрос: есть ли эквивалент вставки, который может перемещать диапазон в вектор?