accumulate 定义在#include<numeric>中,作用有两个,一个是累加求和,另一个是自定义类型数据的处理。

累加求和

int a[5] = {0, 1, 3, 4, 5};
int sum = accumulate(vec.begin() , vec.end() , 0);

accumulate 有三个参数:头两个参数是要累加的元素范围,第三个参数是累加的初始值。

accumulate 函数将它的一个内部变量设置为一个指定的初始值,然后在此初值上累加输入范围内所有元素的值。accumulate 算法返回累加的结果,其返回类型就是其第三个实参的类型。

可以使用 accumulate 把 string 型的 vector 容器中的元素连接起来:

string sum = accumulate(v.begin() , v.end() , string(" "));

这个函数调用的效果是:从一个空格字符串开始,把vec里的每个元素连接成一个字符串。

自定义数据类型的处理

C++ STL中有一个通用的数值类型计算函数— accumulate(),可以用来直接计算数组或者容器中C++内置数据类型,例如:

#include <numeric>
int arr[]={10, 20, 30, 40, 50};
vector<int> va(&arr[0], &arr[5]);
int sum = accumulate(va.begin(), va.end(), 0);  //sum = 150

但是对于自定义数据类型,我们就需要自己动手写一个回调函数来实现自定义数据的处理,然后让它作为 accumulate() 的第四个参数,accumulate() 的原型为

template<class _InIt, class _Ty,  class _Fn2>
inline _Ty _Accumulate(_InIt _First, _InIt _Last, _Ty _Val, _Fn2 _Func)
{   // return sum of _Val and all in [_First, _Last), using _Func  for (; _First != _Last; ++_First)  _Val = _Func(_Val, *_First);  return (_Val);
}

【示例】

#include <vector>
#include <string>
using namespace std;  struct Grade  {  string name;  int grade;
};  int main()  {  Grade subject[3] = {  { "English", 80 },  { "Biology", 70 },  { "History", 90 }  };  int sum = accumulate(subject, subject + 3, 0, [](int a, Grade b){return a + b.grade; });  cout << sum << endl;  return 0;
}

accumulate 的用法相关推荐

  1. C++的accumulate()的用法

    本博客只作为自己使用时查阅 用法: accumulate(vec.begin(), vec.end(), 0) // 累加begin()到end(),初值为0

  2. C++的STL中accumulate的用法

    accumulate定义在#include<numeric>中,作用有两个,一个是累加求和,另一个是自定义类型数据的处理 1.累加求和 int sum = accumulate(vec.b ...

  3. accumulate详细用法

    accumulate 作用是累加一个数组的元素 定义在头文件 < numeric > accumulate(vt.begin(), vt.end(), 0); 第三的参数是起始数 #inc ...

  4. std::accumulate的用法

    std :: accumulate 累计范围内的值 返回将范围中的所有值累加[first,last)到init的结果. 默认操作是向上添加,但可以将不同的操作指定为binary_op. accumul ...

  5. accumulate的用法

    accumulate定义在#include中,作用有两个,一个是累加求和,另一个是自定义类型数据的处理 1.累加求和 int sum = accumulate(vec.begin() , vec.en ...

  6. C++的STL中accumulate函数用法

    accumulate(arr.begin(), arr.end(), int val); accumulate函数包含在 #include<numeric> 头文件下,其中有三个参数,前两 ...

  7. C++:accumulate函数用法

    头文件:#include<numeric> 作用1:累加求和 int sum = accumulate(vec.begin(), vec.end(), 0); 其中前两个参数代表求和的范围 ...

  8. C++ STL 中的accumulate的用法

    accumulate定义在#include<numeric>中,作用有两个,一个是累加求和,另一个是自定义类型数据的处理 1.累加求和 [cpp] view plain copy int  ...

  9. C++中accumulate的用法

    accumulate定义在#include中,作用有两个,一个是累加求和,另一个是自定义类型数据的处理 累加求和 int sum = accumulate(vec.begin() , vec.end( ...

最新文章

  1. [C] 深度优先搜索解决连通块/染色问题——求岛的个数
  2. 本地安装gem install --local redis-stat-0.4.13.gem
  3. LRU最近最少使用缓存集合
  4. c++突破网关屏蔽_为什么加了屏蔽罩,测试效果反而不好?
  5. 了解 C# foreach 内部语句和使用 yield 实现的自定义迭代器
  6. HDU5620 KK's Steel【菲波拉契数列+水题】
  7. poj 1734 Sightseeing trip(floyd 拓展 求最小环)
  8. 【车牌识别】基于matlab投影模板匹配车牌识别【含Matlab源码 1359期】
  9. 2022亚太杯数学建模比赛准备
  10. 2021SC@SDUSC Zxing开源代码(十五)PDF417二维码(一)
  11. 服务器正文21:不同编译器对预编译的处理(简单介绍msvc和gcc)及常用gcc编译指令、跨平台debug、release不同指令flag选择
  12. java 情感分析_Flink基于Alink中文情感分析示例(Java版本)
  13. springboot+vue校园新闻网站(源码+说明文档)
  14. 活动总曝光超1亿,单场引导GMV超1000万,华少快手生活服务专场首战告捷!
  15. 学会爬虫不用再收藏了,直接把网站拍照留念
  16. 矩阵旋转(逆时针九十度
  17. 高中数学向量巨难题型四心问题解题技巧
  18. mac挂载ntfs格式移动硬盘
  19. AcWing 204. 表达整数的奇怪方式
  20. 2021年T电梯修理考试及T电梯修理考试总结

热门文章

  1. PCDN服务接入实操手册
  2. 最新前端开发面试笔试题及答案---图片(面试题系列持续更新中)(8)
  3. 【老生谈算法】matlab实现高斯白噪声仿真算法源码——高斯白噪声
  4. centos9 intel集显直通方法
  5. iconfont官网中的图标保留其原本的颜色
  6. Android 面试指南
  7. 使用Calibre转换任意格式为支持KF8的mobi文件
  8. Magnetic Levitation for Soft-Tethered Capsule Colonoscopy Actuated With a Single Permanent Magnet
  9. C/C++基础查漏补缺(一)----------寒假学习笔记(一)
  10. 栈和队列的区别与栈和堆的区别