我希望以下代码片段生成所有元素和初始值的总和,但事实并非如此:
vector<long> a;
a.resize(10);
generate(a.begin(), a.end(), [n = 1]() mutable { return n++; });
#ifdef _MSC_VER
sum = parallel_reduce(a.begin(), a.end(), 10);
assert(sum == 65); // 11 * 5 + 10. It produces 215 instead.
#endif
它生成的是 215
,而不是预期的 65
。即使每个元素都是按 10
添加的,31 * 5 = 155
,而不是 215
。 215
是如何产生的?
我想念什么?任何解释如何使用初始值的引用都将受到赞赏。
最佳答案
您并没有真正提供 MCVE,因为相关代码片段无法编译,但一个问题仍然很明显:您假设 parallel_reduce
的最后一个参数是初始值,而根据文档这是身份值(value)。
加法恒等式为 0,如果通过,将得到预期结果 (55)。
关于parallel-processing - C++parallel_reduce如何使用初始值参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72299971/