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 分钟前
AI人工智能中的类别不平衡问题:成因、影响与解决方案
开发语言·人工智能·python·机器学习
兰令水9 分钟前
hot100【acm版】【2026.7.21打卡-java版本】
java·开发语言·算法·leetcode·面试
qz5zwangzihan117 分钟前
题解:Atcoder Beginner Contest abc467 F - Email Scheduling Optimization
c++·贪心·atcoder·平衡树·abc467·abc467_f·fhq-treap
2501_9142459319 分钟前
Java应用性能调优与生产监控部署:2026年实战手册
java·开发语言
时光不染。回忆不淡38 分钟前
Python基础语法教程
开发语言·python
爱喝水的鱼丶42 分钟前
SAP-ABAP:一次关于“交货日期”的增强需求:从复杂增强到标准功能的回归之旅
运维·开发语言·性能优化·sap·abap·经验交流
郝学胜-神的一滴1 小时前
中级OpenGL教程 023:Assimp模型加载全解——从源码到架构的骈文探秘
c++·unity·游戏引擎·cmake·unreal engine·opengl
星恒随风1 小时前
C++ STL 详解:list 的使用、迭代器失效、模拟实现与 vector 对比
开发语言·数据结构·c++·笔记·学习·list
Tim_101 小时前
【C++】019、内存泄漏
java·开发语言
牢姐与蒯1 小时前
c++之异常
开发语言·c++·c++11