Как обработать отсутствующий 'emplace_range' в C ++ 0x STL?

У меня есть два контейнера, допустим, они определены следующим образом:

std::vector<std::unique_ptr<int>> a;
std::vector<std::unique_ptr<int>> b;

Предположим, что оба a и b заполнены. Я хочу вставить весь контейнер a в определенное место в b , используя семантику перемещения, чтобы unique_ptr s переместился в b . Предположим, что i является допустимым итератором где-то в b . Следующее не работает:

b.insert(i, a.begin(), a.end()); // error: tries to copy, not move, unique_ptrs

Есть ли другой алгоритм STL, который может достичь этой «вставки диапазона путем перемещения»? Думаю, мне нужен своего рода emplace_range , но его нет в VS2010 в STL. Я не хочу писать цикл, который вставляет один за другим, так как это закончится неприятным O (n ^ 2) из-за смещения всего содержимого вектора каждый раз, когда он вставляется. Какие-либо другие варианты?

10
задан AshleysBrain 17 November 2010 в 01:22
поделиться