[英]std::transform on vector of vector
我想在向量的向量上应用std :: transform。 此转换应将std::vector<std::vector<Told>>
为std::vector<std::vector<Tnew>>
。
我尝试了以下方法,它起作用了:
std::vector<std::vector<Told>> source;
//fill source
std::vector<std::vector<Tnew>> dest;
dest.reserve(inliers_pairs.size());
std::transform(begin(source), end(source), std::back_inserter(dest), [](std::vector<Told>& item){
std::vector<Tnew> new_item;
new_item.reserve(item.size());
std::transform(begin(item), end(item), std::back_inserter(new_item), [](Told& inner_item){
return get_Tnew_from_Told(inner_item);
});
return new_item;
});
是否有直接的方法可以一次转换呢? 清洁方式? 更高效?
如果定义转换运算符不能有效地破坏类的设计,并可能导致其他地方的错误/问题。 一种选择是在Tnew类中定义一个转换构造函数:
class Tnew {
// ...
public:
Tnew() = default;
Tnew(Told const &tn);
^^^^^^^^^^^^^^^^^^^^^
// ...
};
接着 :
std::vector<std::vector<Told>> source;
std::vector<std::vector<Tnew>> dest(source.size());
std::transform(source.begin(), source.end(), dest.begin(),
[](std::vector<Told> const &v){ return std::vector<Tnew>(v.begin(), v.end()); });
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.