我以前用这种方式复制数据,从容器到容器有一些变化:
std::vector<Tsrc> source{Tsrc(),Tsrc(2),Tsrc(3),Tsrc(4)};
std::vector<Tdst> dst(source.size());
std::transform(begin(source),end(source),begin(dst),[](Tsrc& item){
return do_something(item);
}
首先,是以前的代码标准和干净?可以应用任何增强吗?
其次,我现在想要对没有默认构造函数的Tdst
做同样的事情。所以,上面的代码将无法正常工作。我把它改为:
std::vector<Tsrc> source{Tsrc(),Tsrc(2),Tsrc(3),Tsrc(4)};
std::vector<Tdst> dst;
dst.reserve(source.size());
for(auto& item:dst){
dst.emplace_back(do_something(item));
}
这是正确的方法吗?有什么建议吗?
答案 0 :(得分:4)
你在做什么看起来很好。您可以使用std::back_inserter
来避免显式循环。此外,由于原始范围的元素未被修改,因此lambda的参数应为const
:
dst.reserve(source.size());
std::transform(begin(source), end(source), back_inserter(dst),
[](const Tsrc& item){return do_something(item);});