【发布时间】:2021-07-26 08:19:12
【问题描述】:
也许我错过了什么。 <algorithm> 中有这样的功能吗?如果不是,你会怎么称呼它?这似乎是一种特殊的变换归约风格,它非常具体,需要一个名字:
template <typename Iter, typename OutIter, typename Fn>
void transformed_concatenated(Iter beg, Iter end, OutIter out, Fn f) {
for (; beg != end; ++beg) {
for (auto& x : f(*beg)) {
*out++ = std::move(x);
}
}
return out;
}
也就是说,如果我这样做了
const std::vector<int> input { 0, 1, 2, 3 };
const auto f = [](int n) { return std::vector<int>(n, n * 2 + 1); };
std::vector<int> result;
transformed_concatenated(input.begin(), input.end(), std::back_inserter(result), f);
我会得到3, 5, 5, 7, 7, 7。
std::transform_reduce 可以做类似的事情,但我觉得它失去了一些东西。
【问题讨论】:
-
您能否添加一个关于代码应该做什么的文字描述(除了代码)?我不喜欢依靠对某人代码的解释来确定他们的意图。
-
这有时被称为
flatMap。 -
除了文字说明之外,为函数添加输入和所需输出的示例也很有帮助。
标签: c++ algorithm stl stl-algorithm