将向量<std::unique_ptr<A>> 转换为向量<A>

Transforming a vector<std::unique_ptr<A>> to vector<A>

std::unique_ptr<A>个向量。我需要将该数据传递给需要 A.

向量的函数

我试过使用 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;
               });