#include <numeric> int arr[]={10,20,30,40,50}; vector<int> va(&arr[0],&arr[5]); int sum=accumulate(va.begin(),va.end(),0); //sum = 150
但是对于自定义数据类型,我们就需要自己动手写一个类来实现自定义数据的处理,然后让它作为accumulate()的第四个参数,accumulate()的原型为(文件取自DEV-C++编译器):
template<typename _InputIterator, typename _Tp, typename _BinaryOperation> _Tp accumulate(_InputIterator __first, _InputIterator __last, _Tp __init, _BinaryOperation __binary_op) { // concept requirements __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>) __glibcxx_requires_valid_range(__first, __last); for ( ; __first != __last; ++__first) __init = __binary_op(__init, *__first); return __init; }
第四个参数为 __binary_op ,我们需要重写这个函数对象,后面还会继续分析...
假设自定义数据类型为:
struct Student { string name; // 学生姓名 int total; // 四级分数 };那么我们可能要定义如下列的类:
#include <iostream> #include <algorithm> #include <numeric> #include <vector> #include <string> using namespace std; struct Student { string name; int total; }; class PS{ public: int operator()(int t1,const Student& t2) { return (t1 + t2.total); } }; int main() { Student student[3]={ {"hicjiajia",10}, {"sijikaoshi",20}, {"what",40} }; int sum=accumulate(&student[0],&student[3],0,PS()); cout<<sum<<endl; system("pause"); return 0; }