我正在寻找对#34;返回值"的含义的详尽解释。 Patients p = patient.getValue(Patients.class)
的描述,根据cppreference.com,是:
也许在我能够正确理解背后的想法"返回价值"部分,我可以更好地确定std::reduce
超过std::reduce
的位置。
答案 0 :(得分:30)
std::accumulate
按顺序迭代容器,std:reduce
可能不会。由于订单无法保证,std::reduce
引入了额外的要求:
如果binary_op不是关联的或不可交换的,则行为是不确定的。如果binary_op修改任何元素或使[first;]中的任何迭代器无效,则行为是未定义的。最后],包括结束迭代器。
但是,std::reduce
提供了支持并行化的重载,std::accumulate
无法提供这些重载。 std::reduce
允许您自动并行化您的操作,前提是它符合上述要求。
答案 1 :(得分:1)
允许并行性是添加std :: reduce
还需要确保要与std :: reduce一起使用的操作都具有关联性 和可交换。
例如,加法是关联的,当使用std :: reduce并行进行累加时,结果相同。
100 + 50 + 40 + 10 = 200
(100 + 40) + (50 + 10) = 200
但是减法不是关联的,std :: reduce可能会给出错误的结果。
100 - 50 - 40 - 10 = 0 NOT SAME AS
(100 - 40) - (50 - 10) = 20
效率
std::vector<double> v(100000, 0.1);
double result = std::accumulate(v.begin(), v.end(), 0.0);
double result = std::reduce(std::execution::par,v.begin(),v.end()) //Faster