C++ STL reduce 用法

一:功能

累加求和,它是 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
}
相关推荐
geovindu6 分钟前
rust: pool Pattern
开发语言·后端·设计模式·rust·对象池简写模式
曼巴UE514 分钟前
UE 属性同步
网络·c++·ue5
无忧.芙桃28 分钟前
图的精髓:邻接矩阵与遍历全解析
c++·算法·面试·深度优先·广度优先
jimy129 分钟前
标准的动态类型定义与“多态”无关,非多态对象同样会出现动态类型不同于静态类型的情形
开发语言·c++
冬、不眠的夜29 分钟前
Nuitka 将 python 程序编译成 exe 指南
开发语言·python
CVer儿31 分钟前
起源1引擎相关知识点2--World Brush+func_detail
开发语言
MOONICK34 分钟前
COM 组件技术(三)
c++·windows
_wxd66642 分钟前
二叉搜索树(BST)万字详解:概念、操作、性能分析与 C++ 实现
数据结构·c++·二叉搜索树
薛之谦_1 小时前
JAVA 多线程编程:从基础原理到实战应用
java·开发语言
LMT_Lanmantech1 小时前
Creo许可降本增效:不增购,也能让现有许可发挥更大价值
java·大数据·开发语言