如何将唯一指针从一个向量移动到另一个唯一指针向量?

时间:2018-12-25 12:30:28

标签: c++ c++11 vector unique-ptr

如何在C ++ 11中将unique_ptr从一个向量移到unique_ptr的另一个向量?应该将第一个向量中的唯一指针完全删除,并添加到第二个向量中。

2 个答案:

答案 0 :(得分:2)

那么,在这种情况下,您有两个概念上独立的操作:

  1. 将元素插入容器。当您要消除源代码时(实际上是必要的,因为std::unique_ptr是仅移动类型),请使用std::move启用移动语义。

    destination.emplace(destination.begin() + m, std::move(source[n])); // or .insert()
    
  2. 从容器中删除掠夺的元素。

    source.erase(source.begin() + n);
    

答案 1 :(得分:0)

<algorithm>包含std::move的实现。

std::vector<std::unique_ptr<int>> v1;
v1.emplace_back(std::make_unique<int>(1));
std::vector<std::unique_ptr<int>> v2;
v2.emplace_back(std::make_unique<int>(2));

std::move(v1.begin(), v1.end(), std::back_inserter(v2));

for (auto &&e : v2)
    std::cout << *e;
 // Prints 21

执行此操作后,v1将包含1个具有nullptr值的元素。