当前位置:

首页 > 编程开发 > C++ std::accumulate累加使用方法

C++ std::accumulate累加使用方法

std::accumulate用于累加容器元素,默认加法,需指定迭代器范围和初始值;支持自定义二元操作、浮点精度控制及C++20变换组合。

std::accumulate用于累加容器元素,默认加法,需指定迭代器范围和初始值;支持自定义二元操作、浮点精度控制及C++20变换组合。

C++如何使用std::accumulate进行累加?(数值算法)

用 std::accumulate 累加容器中的数值非常直接,它属于 头文件,核心作用是将一个范围内的元素按二元操作(默认是加法)依次合并成单个值。

基础用法:求和整数容器

最常见场景是对 std::vector、std::array 等序列求和。需要传入起始迭代器、结束迭代器和初始值:

  • 初始值不能省略,它既是累加起点,也决定了返回类型(比如用 0.0 得到 double 结果)
  • 迭代器范围是左闭右开:[first, last),即不包含 last 指向的元素
  • 若容器为空,结果就是你传入的初始值

示例:

std::vector v = {1, 2, 3, 4};
int sum = std::accumulate(v.begin(), v.end(), 0); // 结果为 10

支持自定义运算:不只是加法

第四个参数可传入任意二元函数对象(如 lambda、函数指针或仿函数),实现乘积、最大值、字符串拼接等:

  • 函数签名应为 T op(T a, U b),其中 a 是当前累加结果,b 是下一个元素
  • 注意参数顺序:累积值在前,新元素在后

示例(计算乘积):

int product = std::accumulate(v.begin(), v.end(), 1, std::multiplies<>{}); // 24
// 或用 lambda:
auto concat = std::accumulate(strs.begin(), strs.end(), std::string{}, [](const std::string& a, const std::string& b) { return a + "-" + b; });

处理浮点数与精度注意点

对 float 或 double 累加时,初始值类型需明确,避免隐式转换导致中间截断:

  • 用 0.0 而非 0 作为初始值,确保以浮点类型累加
  • 标准 accumulate 按从左到右顺序执行,不保证数值稳定性;对高精度要求场景,可考虑 std::reduce(C++17,并行+乱序优化)或 Kahan 求和算法

示例:

std::vector d = {1e10, 1.0, -1e10};
double bad = std::accumulate(d.begin(), d.end(), 0); // 可能得 0.0(因 1e10+1.0 被舍入)
double good = std::accumulate(d.begin(), d.end(), 0.0); // 明确 double 类型,但顺序问题仍存在

配合其他迭代器适配器使用

std::accumulate 可与 std::transform_iterator(需 和自定义包装)或 C++20 的 std::views::transform 配合,实现“先变换再累加”逻辑(注意:C++20 前需手动构造迭代器或先生成临时容器):

  • C++20 推荐写法(需编译器支持):
    auto sq_sum = std::accumulate(data.begin(), data.end(), 0.0, [](double a, int b) { return a + b*b; });
  • 更清晰的分离方式:先用 std::transform 存入新容器,再 accumulate —— 适合逻辑复杂或需复用变换结果的场景
本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
作者最新文章
编程开发
相关文章 更多
如何在WPSOffice2019选中区域启用自动筛选
如何在WPSOffice2019选中区域启用自动筛选

想在WPS表格中快速查找“待发货”订单?本教程详解Windows版WPS Office 2019自动筛选的正确用法,包括选区技巧、快捷键开启、条件设置及恢复显示,避免漏选数据行。

abbyyfinereader怎么安装 软件下载安装步骤
abbyyfinereader怎么安装 软件下载安装步骤

想知道 ABBYY FineReader 怎么安装?本教程基于 Windows 11 和 FineReader PDF 16,逐步演示如何从官网下载安全安装包、运行安装向导、完成序列号激活以及验证软件功能。避免使用非官方来源,确保 OCR 软件稳定可用。

blender低版本打开高版本文件教程详解
blender低版本打开高版本文件教程详解

解决Blender版本不兼容问题,详解如何利用中间版本(如3.6)将高版本(4.0)工程文件安全转换为低版本(3.3)可用格式,包含关键设置检查与数据完整性验证。

guitar+pro怎么设置 常用功能配置教程
guitar+pro怎么设置 常用功能配置教程

新手如何设置 Guitar Pro?本文详解 Windows 版 GP8 的音频设备选择、相对速度练习法及节拍器预备拍设置,助你快速进入高效练琴状态。

Harness Engineering是什么?与提示词、上下文工程的关系
Harness Engineering是什么?与提示词、上下文工程的关系

了解 Harness Engineering 的核心定义及其与提示词工程、上下文工程的关系。文章通过分层视角,解释如何从问题表达、信息组织到系统搭建,全面理解智能体的运行机制。

Premiere怎么改成中文
Premiere怎么改成中文

想在Windows上将Premiere Pro菜单改为中文?只需在Creative Cloud中修改默认安装语言并重新安装软件。本文提供详细的备份、设置及验证步骤,避免误删工程或插件冲突。

PS常用快捷键大全图片在哪找
PS常用快捷键大全图片在哪找

想保存一份准确的 PS 快捷键大全图片?不要盲目搜索网络图表。本文教你如何在 Windows 版 Photoshop 中通过【键盘快捷键】窗口查看本机设置,导出 HTML 摘要列表,并截取清晰可用的快捷键图片,确保内容与你的软件版本及自定义设置完全一致。

如何在WPSOffice2019一键开启和关闭筛选
如何在WPSOffice2019一键开启和关闭筛选

学习在WPS Office 2019 Windows版中如何使用筛选功能。了解开始选项卡按钮、Ctrl+Shift+L快捷键及表头下拉菜单的作用,快速切换筛选开关并核对显示结果。

Xshell怎么把日志下载到本地
Xshell怎么把日志下载到本地

详细讲解如何在Xshell中利用SFTP协议将Linux服务器上的日志文件(如app.log)安全下载到Windows本地指定文件夹。包含cd、lcd、get等关键命令的使用方法及会话日志记录的替代方案。

coreldraw快捷键用不了 失效原因和解决办法
coreldraw快捷键用不了 失效原因和解决办法

CorelDRAW快捷键没反应?可能是处于文字输入状态或快捷键表选择错误。本文详解如何检查Current shortcut keys、解决按键冲突及排除输入法干扰,快速恢复CorelDRAW高效操作。

查看更多
精品专题 更多
装机必备
装机必备

正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

Windows
Windows

正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

PDF教程
PDF教程

正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

Mac软件 更多
Aperty macOS版
Aperty macOS版
macOS

Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

火山引擎 网页版
火山引擎 网页版
Windows/ macOS/ Linux

火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

立刻MV 网页版
立刻MV 网页版
Windows/ macOS/ Linux

立刻MV 面向音乐人、内容创作者和品牌团队,帮助用户低成本完成歌曲 MV、歌词视频、AI 分镜、图生视频与最终合成。

WINDOWS 更多
Aperty Windows版
Aperty Windows版
Windows

Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

火山引擎 网页版
火山引擎 网页版
Windows/ macOS/ Linux

火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

立刻MV 网页版
立刻MV 网页版
Windows/ macOS/ Linux

立刻MV 面向音乐人、内容创作者和品牌团队,帮助用户低成本完成歌曲 MV、歌词视频、AI 分镜、图生视频与最终合成。