将向量 >转换为向量

问题描述 投票:2回答:1

[向量为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循环手动完成此操作,但我想知道是否有更优雅的方法来执行此操作。

c++ vector std unique-ptr
1个回答
8
投票

将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;
               });
© www.soinside.com 2019 - 2024. All rights reserved.