有一个 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/