accumulate定义在#include<numeric>中,作用有两个,一个是累加求和,另一个是自定义类型数据的处理
1.累加求和
int sum = accumulate(vec.begin() , vec.end() , 累加的初始值);
例:
① 数值相加
int sum = accumulate(vec.begin() , vec.end() , 42);
② 字符串拼接
string sum = accumulate(v.begin() , v.end() , string(" "));
2.自定义数据类型的处理
使用Lambda表达式,将自定义结构体struct Grade中的grade相加,求总和。
#include<algorithm>
#include<numeric>
#include <vector>
#include <string>
#include <iostream>
using namespace std;
struct Grade
{
string name;
int grade;
};
vector<Grade> subject = {
{ "English", 80 },
{ "Biology", 70 },
{ "History", 90 }
};
int main()
{
// 方法1:accumulate
// 累加的初始值 = 0
int sum1 = accumulate(subject.begin(), subject.end(), 0,
[](int a, Grade b)->int {return a + b.grade; }
);
cout << "sum1 = " << sum1 << endl;
// 方法2:for_each
int sum2 = 0; //累加的初始值 = 0
for_each(subject.begin(), subject.end(),
[&sum2](Grade b)->void { sum2 += b.grade; } // sum2作为引用形参传递
);
cout << "sum2 = " << sum2 << endl;
system("pause");
return 0;
}