gpt4 book ai didi

c++ - std::transform vector 的 vector

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:48:19 25 4
gpt4 key购买 nike

我想在 vector 的 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()); });

Live Demo

关于c++ - std::transform vector 的 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33954765/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com