C++parallel_reduce如何使用初值参数?

How does C++ parallel_reduce use the inital value parameter?

我希望下面的代码片段能够生成所有元素的总和和初始值,但它没有:

    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

而不是预期的 65,它产生 215。即使每个元素都由 1031 * 5 = 155 添加,而不是 215215是怎么来的? 我想念什么?感谢任何解释如何使用初始值的参考。

您并没有真正提供 MCVE,因为有问题的代码片段无法编译,但一个问题仍然很明显:您假设 parallel_reduce 的最后一个参数是初始值,而根据文档,它是标识值。

加法的标识为 0,如果你通过它,你将得到预期结果 (55)。