为什么C++标准库中有std::transform_reduce?

问题描述 投票:0回答:2

C++ 标准库中有

std::transform
std::reduce
函数。如果我们使用
std::transform_reduce
而不是
std::transform
std::reduce
的组合,我们有什么优势(除了缩短代码)?

c++ mapreduce
2个回答
2
投票

基于迭代器的

<algorithm>
如果没有临时副本就无法组合。

如果函数将惰性迭代器返回到转换后的范围,那么它们就可以,但无论好坏,这都不是这些函数的设计方式。

因此,您会得到

XXX_YYY
,无需额外副本即可完成这两件事,但并非所有组合都可用,并且它们仍然无法扩展到多个操作。

允许将操作组合到各种计算管道中是

<ranges>
的主要优点之一。


1
投票

std::transform_reduce
<numeric>
中,目标更像是“提供
std::inner_product
的通用且非序列版本”。具体来说,都是
Init op f(x_0, y_0) op f(x_1, y_1) ... op f(x_n, y_n)
,但是
std::inner_product
需要从头到尾一一准确计算,而
std::transform_reduce
则不强制这样做,并且有并行版本。此外,
std::transform_reduce
还可以通过一元运算进行变换,即
Init op f(x_0) op f(x_1) ... op f(x_n)

这类似于

std::inclusive_scan
std::partial_sum
之间的关系。

© www.soinside.com 2019 - 2024. All rights reserved.