将数据从向量转换为其他没有默认构造函数

时间:2015-11-23 07:18:14

标签: c++ c++11 vector

我以前用这种方式复制数据,从容器到容器有一些变化:

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));
}

这是正确的方法吗?有什么建议吗?

1 个答案:

答案 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);});