У меня есть два контейнера, допустим, они определены следующим образом:
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) из-за смещения всего содержимого вектора каждый раз, когда он вставляется. Какие-либо другие варианты?