У меня есть два контейнера, допустим, они определены следующим образом:
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
, но его нет в STL VS2010. Я не хочу писать цикл, который вставляет один за другим, так как это приведет к неприятному O (n ^ 2) из-за смещения всего содержимого вектора при каждом его добавлении. Любые другие варианты?