文章目录

  • 一、函数简单介绍
  • 二、具体使用场景
    • 1. 计算数组中所有元素的和
    • 2. 计算数组中所有元素的乘积
    • 3. 计算数组中每个元素乘以3之后的和
    • 4.计算数组中每个元素减去3之后的和
    • 5.计算班级内学生的平均分
    • 6.拼接字符串

一、函数简单介绍

accumulate是numeric库中的一个函数,主要用来对指定范围内元素求和,但也自行指定一些其他操作,如范围内所有元素相乘、相除等。
使用前需要引入相应的头文件。

#include <numeric>
  • 函数共有四个参数,其中前三个为必须,第四个为非必需

  • 若不指定第四个参数,则默认对范围内的元素进行累加操作。

accumulate(起始迭代器, 结束迭代器, 初始值, 自定义操作函数)

二、具体使用场景

1. 计算数组中所有元素的和

#include <iostream>
#include <vector>
#include <numeric>
using namespace std;int main() {vector<int> arr{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};int sum = accumulate(arr.begin(), arr.end(), 0); // 初值0 + (1 + 2 + 3 + 4 +... + 10)cout << sum << endl; // 输出55return 0;
}

2. 计算数组中所有元素的乘积

需要指定第四个参数,这里使用的是乘法函数 multiplies<type>(), type根据元素的类型选择。

#include <iostream>
#include <vector>
#include <numeric>using namespace std;int main() {vector<int> arr{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};int sum = accumulate(arr.begin(), arr.end(), 1, multiplies<int>()); // 初值1 * (1 * 2 * 3 * 4 *... * 10)cout << sum << endl;  // 输出3628800return 0;
}

3. 计算数组中每个元素乘以3之后的和

#include <iostream>
#include <vector>
#include <numeric>using namespace std;int fun(int acc, int num) {return acc + num * 3;     // 计算数组中每个元素乘以3
}int main() {vector<int> arr{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};int sum = accumulate(arr.begin(), arr.end(), 0, fun);cout << sum << endl;    // 输出 165return 0;
}

4.计算数组中每个元素减去3之后的和

#include <iostream>
#include <vector>
#include <numeric>using namespace std;int fun(int acc, int num) {return acc + (num - 3) ;     // 计算数组中每个元素减去3之后的和
}int main() {vector<int> arr{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};int sum = accumulate(arr.begin(), arr.end(), 0, fun);cout << sum << endl;    // 输出25return 0;
}

5.计算班级内学生的平均分

#include <iostream>
#include <vector>
#include <numeric>using namespace std;struct Student {string name;int score;Student() {};   // 无参构造函数Student(string name, int score) : name(name), score(score) {};  // 有参构造函数
};int fun(int acc, Student b) {return acc + b.score;
}int main() {vector<Student> arr;arr.emplace_back("Alice", 82);arr.emplace_back("Bob", 91);arr.emplace_back("Lucy", 85);arr.emplace_back("Anna", 60);arr.emplace_back("June", 73);int avg_score = accumulate(arr.begin(), arr.end(), 0, fun) / arr.size(); // 总分/学生数cout << avg_score << endl;return 0;
}

6.拼接字符串

C++中字符串之间也可以使用+,即拼接两个字符串。

#include <iostream>
#include <vector>
#include <numeric>using namespace std;int main() {vector<string> words{"this ", "is ", "a ", "sentence!"};string init, res;res = accumulate(words.begin(), words.end(), init);    // 连接字符串cout << res << endl;    // this is a sentence!return 0;
}

转载于https://blog.csdn.net/VariatioZbw/article/details/125257536

C++ accumulate函数用法相关推荐

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

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

  2. C++:accumulate函数用法

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

  3. OpenCV最全函数用法

    记录OpenCV中学习的函数用法 文章目录 图像阈值 cv.threshold()全局阈值 cv.adaptiveThreshold()自适应阈值 Otsu's Binarization: 基于直方图 ...

  4. C++ copy()函数用法详解(深入了解,一文学会)

    C++ 算法 copy() 函数用于将容器 [first,last] 的所有元素从结果开始复制到不同的容器中. 本文介绍了copy.strcpy.strncpy.memcpy.copy_n.copy_ ...

  5. 2021年大数据常用语言Scala(三十七):scala高级用法 高阶函数用法

    目录 高阶函数用法 作为值的函数 匿名函数 柯里化(多参数列表) 闭包 高阶函数用法 Scala 混合了面向对象和函数式的特性,在函数式编程语言中,函数是"头等公民",它和Int. ...

  6. php foreach嵌套foreach,php中foreach怎么嵌套foreach PHP中foreach函数用法?

    foreach的使用方法小编不是很明确,分享达人指教一下.foreach (array_expressforeach($array as $key) { if(xxxx) { break; //bre ...

  7. linux中awk下 gsub函数用法

    gsub函数则使得在所有正则表达式被匹配的时候都发生替换 gsub(regular expression, subsitution string, target string);简称 gsub(r,s ...

  8. ROW_NUMBER() OVER()函数用法详解 (分组排序 例子多)

    ROW_NUMBER() OVER()函数用法详解 (分组排序 例子多) https://blog.csdn.net/qq_25221835/article/details/82762416 post ...

  9. 详细记录python的range()函数用法

    详细记录python的range()函数用法 使用python的人都知道range()函数很方便,今天再用到他的时候发现了很多以前看到过但是忘记的细节.这里记录一下range(),复习下list的sl ...

最新文章

  1. Spring 入门知识点笔记整理
  2. spring boot 项目打成war包部署到服务器
  3. React 在body上绑定事件以及阻止事件冒泡
  4. 中科院C语言应聘机试编程题6,中科院计算所保研笔试+机试+面试经验分享
  5. VGA接口一根针折了
  6. 修改域的NetBIOS名称
  7. 自制电吉他效果器 DIY PCB(三)原理图与封装 上
  8. 部署Extmail邮件系统需注意几点
  9. 华为携西班牙电信于智利设立NB-IoT开放实验室
  10. CSS 3之网页背景颜色
  11. 有道云笔记 markdown html,有道云笔记Markdown之甘特图
  12. liferay-protal学习1-配置开发环境
  13. 转:什么都没有反而可以做得更好
  14. # IE浏览器打不开网页,google浏览器能打开
  15. 三、python数据序列1-列表
  16. spring-context.xml
  17. iOS 开发者账号权限分配
  18. linux scp控制带宽,Linux系统中安装使用Trickle来控制用户带宽
  19. ubuntu 禁用笔记本触摸板
  20. Frame、Iframe、Frameset 的区别

热门文章

  1. 手把手教你用 Jenkins 自动部署 SpringBoot
  2. winxpsp2 mdac 2.8 安装问题[摘]
  3. Navicat连接mysql 提示1023错误
  4. 解决SQLSERVER2019无法通过SQLCMD登陆找不到或无法访问服务器。请检查实例名称是否正确
  5. 基于android实现航空订票系统【100010286】
  6. js算法之“回溯算法”
  7. MIPS寄存器文件设计实验
  8. audio与video
  9. 检查字符串中的日文,韩文
  10. BW延期、CJ重心转移,快看如何借由ACG展持续释放IP价值?