将向量<std::unique_ptr<A>>转换为向量<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更改为常量&

[](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;
});

相关内容

  • 没有找到相关文章

最新更新