繁体   English   中英

std ::在向量的向量上转换

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM