一:功能
累加求和,它是 std::accumulate 的泛化版本,它元素的累加顺序没有要求,因此可以用于并行累加。另外也可以通过重载运算符进行累乘等运算。
二:用法
cpp
#include <iostream>
#include <vector>
#include <numeric>
#include <execution>
int main() {
std::vector<int> data{1, 2, 3, 4, 5};
auto sum = std::reduce(data.begin(), data.end(), 0);
std::cout << "sum == " << sum << "\n";
sum = std::reduce(std::execution::par_unseq,
data.begin(), data.end(), 0);
std::cout << "sum (parallel) == " << sum << "\n";
auto product = std::reduce(data.begin(), data.end(), 1,
std::multiplies<>{});
std::cout << "product == " << product << "\n";
product = std::reduce(std::execution::par_unseq,
data.begin(), data.end(), 1, std::multiplies<>{});
std::cout << "product (parallel) == " << product << "\n";
}
cpp
#include <iostream>
#include <vector>
#include <numeric>
#include <execution>
//通过重载 + 运算符,实现自定义类型的累加操作
struct Foo {
std::string sound = "Foo";
Foo operator+(const Foo& right) const {
return {sound+right.sound};
}
};
int main() {
std::vector<Foo> data(2, Foo{});
Foo final_Foo = std::reduce(data.begin(), data.end());
std::cout << "final_Foo.sound == " << final_Foo.sound << "\n";
//final_Foo.sound == FooFooFoo
}