mam dwa pojemniki, powiedzmy, że są one zdefiniowane następująco:Jak radzić sobie z brakującą 'emplace_range' w C++ 0x STL?
std::vector<std::unique_ptr<int>> a;
std::vector<std::unique_ptr<int>> b;
Załóżmy zarówno a
i b
są wypełniane. Chcę wstawić cały kontener a
do określonej lokalizacji w b
, używając semantyki ruchu, aby unique_ptr
przesunie się do b
. Załóżmy, że i
jest poprawnym iteratorem, który znajduje się gdzieś w b
. Poniższa nie działa:
b.insert(i, a.begin(), a.end()); // error: tries to copy, not move, unique_ptrs
Czy istnieje inny algorytm STL, który może osiągnąć „insert-zakres-by poruszających”? Chyba potrzebuję pewnego rodzaju emplace_range
, ale nie ma jednego w STL VS2010. Nie chcę pisać pętli wstawiającej jeden po drugim, ponieważ skończyłoby się nieprzyjemnym O (n^2) z powodu przesunięcia całej zawartości wektora przy każdym wstawieniu. Jakieś inne opcje?
Awesomeness. Nie wiedziałem o 'make_move_iterator'. – AshleysBrain
VS2010 obsługuje to. Dobry. –