如何在C++ 0x STL中处理缺少的'emplace_range'?

Ash*_*ain 10 c++ algorithm move-semantics c++11

我有两个容器,假设它们的定义如下:

std::vector<std::unique_ptr<int>> a;
std::vector<std::unique_ptr<int>> b;
Run Code Online (Sandbox Code Playgroud)

假设双方ab被填充.我想使用move-semantics 将整个容器插入a 到特定位置b,以便unique_ptrs移动到b.我们假设它i是一个有效的迭代器b.以下不起作用:

b.insert(i, a.begin(), a.end()); // error: tries to copy, not move, unique_ptrs
Run Code Online (Sandbox Code Playgroud)

是否有另一种STL算法可以实现这种"插入范围移动"?我想我需要一种emplace_range,但VS2010的STL中没有一种.我不想写一个逐个插入的循环,因为它会在每次插入时向上移动向量的整个内容时结束令人讨厌的O(n ^ 2).还有其他选择吗?

ron*_*nag 17

auto a_begin = std::make_move_iterator(a.begin());
auto a_end = std::make_move_iterator(a.end());

b.insert(i, a_begin, a_end); 
Run Code Online (Sandbox Code Playgroud)

  • 迷死人.不知道`make_move_iterator`. (2认同)