[向量为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;
});