Является ли это наиболее эффективным способом перемещения содержимого одного 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);
}
}
Я прав? Я что-то пропустил? Может бытьКакой лучший способ сделать это?