Существует ли стандартный способ перемещения диапазона в вектор?

Рассмотрим следующую программу, которая вставляет диапазон элементов в вектор:

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() в отношении предварительного выделения пространства в целевом векторе, поэтому вектор может быть несколько раз меняли размер во время операции.

Итак, мой вопрос: существует ли эквивалент вставки, который может перемещать диапазон в вектор?

52
задан chema989 25 November 2016 в 13:28
поделиться