Является ли это наиболее эффективным способом перемещения содержимого одного std :: vector в конец другого в C ++ 11?

Я думал, чтоvector::insert() а такжеstd::copy() Команды требуют дополнительного выделения. Тем не менее, если яpush_back() недавно созданный элемент тогдаswap() я думаю, что это уменьшит любые выделения, пока содержащийся тип не выделяется с помощью конструктора по умолчанию.

Мой вопрос на самом деле специально дляstd::vectorс типаstd::string, но должен работать для других содержащихся типов, как указано здесь:

template 
void appendMove(std::vector& dst, std::vector& src)
{
    dst.reserve(dst.size() + src.size())
    for(std::vector::iterator it = src.begin(); it != src.end(); ++it)
    {
        dst.push_back(std::vector());
        std::swap(dst.end()[-1], *it);
    }
}

Я прав? Я что-то пропустил? Может бытьКакой лучший способ сделать это?

Ответы на вопрос(1)

Ваш ответ на вопрос