У меня есть два контейнера, скажем, они определены следующим образом:
std::vector<std::unique_ptr<int>> a;
std::vector<std::unique_ptr<int>> b;
Предположим, что заполнены как a
, так и b
. Я хочу вставить весь контейнер a
в определенное место в b
, используя move-semantics, чтобы unique_ptr
переместился на 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) из-за смещения всего содержимого вектора каждый раз, когда он вставляет. Любые другие варианты?