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<iostream> #include<vector> #include<string> #include<numeric> using namespace std; // 常用算术生成算法: accumulate(iterator beg, iterator end, value); 计算[beg,end)区间中所有元素的和 // all = value + sum(beg,end) void test01(){ vector<int> vec; for(int i=0; i<=100; i++){ vec.push_back(i); } vector<string> 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