c++ - 将 vector <std::unique_ptr<A>> 转换为 vector <A>

标签 c++ vector std unique-ptr

有一个 vector std::unique_ptr<A> 。我需要将该数据传递给需要 A vector 的函数.

我尝试使用std::transform ,像这样:

std::vector<std::unique_ptr<A>> a;

std::vector<A> aDirect;
std::transform(a.begin(), a.end(),
    std::back_inserter(aDirect),
    [](std::unique_ptr<A> element)-> A { return *element; });

但似乎std::transform尝试复制 a 的元素在某些时候,这不起作用,它会因为尝试引用已删除的函数而失败。

当然,我可以使用 for 循环手动执行此操作,但我想知道是否有更优雅的方法。

最佳答案

更改 lambda 以采用 const &

[](std::unique_ptr<A> const &element)-> A { return *element; });

为避免因调整大小而产生拷贝,请在转换前保留正确的大小。

std::vector<A> aDirect;
aDirect.reserve(a.size());
std::transform(a.begin(), a.end(),
               std::back_inserter(aDirect),
               [](std::unique_ptr<A> element) {
                   return *element;
               });

关于c++ - 将 vector <std::unique_ptr<A>> 转换为 vector <A>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60588913/

相关文章:

c++ - C++( future 版本)中是否有任何机制可以使这些事情变得现实?

c++ - 用于嵌入式开发的 Linux 发行版?

c++ - 使用 std::accumulate 计算部分 vector 的总和

c++ - 从 vector 中删除对象

c++ - 确保 vector 中的共享指针被正确推回

c++ - std::sort() C++ 不工作但它很简单,为什么 :( 一维数组

c++ - 为什么在 Linux 上出现错误 "no matching function for call to A::A(A)"而在 Windows 上却没有

c++ - Boost智能指针和std智能指针有什么区别?

c++ - 我可以控制鼠标属性,例如点击速度吗?

c++ - 如何在c++中实现虚表