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
}
相关推荐
雪度娃娃几秒前
行为型设计模式——职责链模式
c++·设计模式·责任链模式
蚰蜒螟4 分钟前
深入剖析 OpenJDK 17 解释器中的安全点(Safepoint)进入与退出机制
java·开发语言·安全
山岚的运维笔记7 分钟前
Bash 专业人员笔记 -- 第 11 章:`true`、`false` 和 `:` 命令
linux·运维·服务器·开发语言·笔记·学习·bash
代钦塔拉7 分钟前
第一篇:字符编码全解:从ASCII/GBK/Unicode到UTF-8
开发语言·qt
syagain_zsx9 分钟前
Qt初识,快速上手
开发语言·qt
·心猿意码·10 分钟前
OCCT源码解析(二):NCollection解析
数据结构·c++
Wy_编程10 分钟前
go语言面向对象和异常处理
开发语言·后端·golang
进击的荆棘12 分钟前
C++起始之路——C++11(下)
开发语言·c++·c++11·lambda
许长安14 分钟前
C++ 原子变量与内存序:从std::atomic到release/acquire
开发语言·数据结构·c++·经验分享·笔记
sanqima15 分钟前
mscomm32.ocx串口插件的注册方法
c++·串口通信·ocx插件