ich zwei Behälter haben, lassen Sie uns sagen, dass sie wie folgt definiert sind:Wie behandelt man fehlende 'emplace_range' in C++ 0x STL?
std::vector<std::unique_ptr<int>> a;
std::vector<std::unique_ptr<int>> b;
beide Angenommen a
und b
bestückt sind. Ich möchte den gesamten Container a
an einer bestimmten Stelle in b
einfügen, mit Bewegungs-Semantik, so dass die unique_ptr
s zu b
verschieben. Nehmen wir an, i
ist ein gültiger Iterator irgendwo in b
. Die folgende funktioniert nicht:
b.insert(i, a.begin(), a.end()); // error: tries to copy, not move, unique_ptrs
Gibt es einen anderen STL-Algorithmus, der diese 'Insert-Bereich-by-moving' erreichen kann? Ich denke, ich brauche eine Art von emplace_range
, aber es gibt keine in STL von VS2010. Ich möchte nicht eine Schleife schreiben, die eins nach dem anderen einfügt, da dies zu einem ekligen O (n^2) führen würde, weil der gesamte Inhalt des Vektors bei jedem Einfügen nach oben verschoben wird. Irgendwelche anderen Wahlen?
Awesomeness. Wusste nicht über 'make_move_iterator'. – AshleysBrain
VS2010 unterstützt dies. Gut. –