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

Posted

技术标签:

【中文标题】如何将唯一指针从一个向量移动到另一个唯一指针向量? [关闭]【英文标题】:How do I move a unique pointer from one vector to another vector of unique pointers? [closed] 【发布时间】:2018-12-25 12:30:28 【问题描述】:

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

【问题讨论】:

视情况而定。它应该替换元素,插入特定位置还是什么?原件应该怎么做? 欢迎来到 Stack Overflow。请阅读the help pages,获取the SO tour,了解how to ask good questions,以及this question checklist。最后学习如何创建minimal reproducible example。 @Deduplicator 已编辑问题。第一个向量中的唯一指针应该被完全删除并添加到第二个向量中。 【参考方案1】:

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

    将元素插入容器。由于您想删除源(这实际上是必要的,因为 std::unique_ptr 是仅移动类型),请使用 std::move 启用移动语义。

    destination.emplace(destination.begin() + m, std::move(source[n])); // or .insert()
    

    从容器中移除掠夺的元素。

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

【讨论】:

【参考方案2】:

<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 值的元素。

【讨论】:

以上是关于如何将唯一指针从一个向量移动到另一个唯一指针向量? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何在带有 Visual Studio 的 dll 导出类中使用唯一指针向量

如何使用 std::shuffle 以随机序列对具有唯一指针的向量进行混洗?

转换为唯一基类指针向量

将指向向量向量的指针移动到特定位置

将项目从一个向量复制到另一个向量

如何将子类作为期望基类的函数的参数传递,然后将该对象传递给指向这些抽象类对象的指针向量?