STL中accumulate的用法

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;
}

猜你喜欢

转载自blog.csdn.net/weixin_36750623/article/details/92080889
今日推荐