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
}
相关推荐
不正经学生3 小时前
C语言预处理详解:编译器真正动手之前的那些事
c语言·开发语言·算法·面试·bug
门思科技3 小时前
LoRaWAN 设备类别:Class A、B、C 对比与选型指南
c语言·开发语言·php
恋恋西风6 小时前
C++ 理解 std::thread 在单核和多核上的行为差异
开发语言·c++
Brilliantwxx6 小时前
【Linux】 进程(9)程序与进程地址空间(基础+进阶+面试题)
linux·运维·服务器·开发语言·c++
BizzZ_6 小时前
C++(22)——类型转换和IO流
开发语言·c++
小范同学_6 小时前
JDK1.7 与 JDK1.8 HashMap 底层原理对比 + 数组并发扩容死循环详解
java·开发语言
geovindu7 小时前
CSharp: 万年历
开发语言·后端·c#·.net
我找到地球的支点啦7 小时前
Matlab系列(009) 一CRC循环冗余校验详解
开发语言·数据结构·算法·matlab·信息与通信
予昊7 小时前
从零实现“在线五子棋对战“:WebSocket 实时通信 + 段位匹配
java·开发语言·网络·websocket
weixin_461408588 小时前
Mybatis-flex小记
java·开发语言·mybatis