C++中STL---accumulate累积函数

accumulate:
        
            功能描述:计算区间内 容器元素累计总和(也可以对自定义数据类型进行累计)
            
            算法简介:accumulate(iterator beg, iterator end, value);    //计算容器元素累计总和
                                                                                                         //[beg,end)为起始迭代器和结束迭代器,vaule为起始值 
                  
            总结:accumulate使用时头文件注意是 numeric ,这个算法很实用

一、函数原型

template< class InputIt, class T >T     //此时可以自定义数据类型
accumulate( InputIt first, InputIt last, T init );
template< class InputIt, class T, class BinaryOperation >T 
accumulate( InputIt first,InputIt last,T init,BinaryOperation op)

当对自定义数据类型进行累加时,需要在第三个参数中指定自定义类型的数据处理方式。如:

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

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

 

二、案例

使用accumulate(iterator beg, iterator end, value)函数计算vector容器中所有元素(0-100)的和,其初始值为1000

#include
#include
#include
#include
using namespace std;

// 常用算术生成算法: accumulate(iterator beg, iterator end, value); 计算[beg,end)区间中所有元素的和
// all = value + sum(beg,end) 

void test01(){
	
	vector vec;
	for(int i=0; i<=100; i++){
		vec.push_back(i); 
	} 
	
	vector vecs;
	vecs.push_back("Hello");
	vecs.push_back("World");
	vecs.push_back("!");
	
    // 对string类型进行累积
	string sunStr = accumulate(vecs.begin(), vecs.end(), string(""));
	
	// 计算vec容器中所有元素的总和 
	int sumNum = accumulate(vec.begin(), vec.end(), 1000);
	
	cout << "vec容器中元素的总和为:" << sumNum << endl;
	cout << "vecs为:" << sunStr << endl;
	
}

int main(){
	
	test01();
	
	system("pause");
	return 0;
	
} 

 此时可以得到计算结果为:1000+0+1+...+100=6050

你可能感兴趣的:(C/C++,STL)