Это может быть сделано более эффективно, если T тяжело копировать и ваш компилятор поддерживает C ++ 0x.
#include <iterator> // for make_move_iterator
size_t n = dst.size();
dst.insert(dst.end(),
std::make_move_iterator(src.begin()),
std::make_move_iterator(src.end()));
std::inplace_merge(dst.begin(), dst.begin() + n, dst.end());
Использование make_move_iterator()
заставит insert()
перемещать содержимое src
в dst
вместо их копирования.
Обновление:
Вы имеете дело с типами POD, и вы уже изменяете размер / копируете все в векторе dst
в вероятном случае, когда insert()
переполняет резерв, поэтому может быть быстрее просто использовать std::merge()
в новый vector
. Это позволит избежать того, что исходная копия И будет иметь худшую сложность в худшем случае:
inplace_merge()
имеет лучший вариант сложности O ( n ), но ухудшается до O ( n log n ) в зависимости от ваши данные.
merge()
имеет наихудший O ( n ), поэтому он гарантированно будет по крайней мере таким же быстрым, потенциально намного быстрее. Он также имеет встроенную оптимизацию перемещения.