转自:http://hi.baidu.com/liziyun537/item/84fa271bf73cdf0be75c3660
函数原型如下:
#include <numeric>
TYPE accumulate( iterator start, iterator end, TYPE val );
TYPE accumulate( iterator start, iterator end, TYPE val, BinaryFunction f );
第一个原型用来计算变量val和容器中某个区间[start,end)元素之和。
比如求某个数组所有元素之和:accumulate(&a[0],&a[n],0); //注意区间为[ ),所以这里为&a[n],而不是&a[n-1]
accumulate(A.begin(),A.end(),10); //可以理解为10+A[1]+A[2]+…
第二个原型相当于函数重载,最后一个参数是为改变求和运算而加载的二元函数,就是让二元函数取代默认的求和运算。
accumulate(A.begin(),A.end(),10,minus<int>()); //可以理解为10-A[1]-A[2]-…
这样一个二元函数可以自定义,也可以参考stl_function.h文件中的一些二元函数,比如plus, minus, multiplies, divides, modulus。
就形参列表而言,虽然变量的位于地址的后面,但理解的时候应该把变量放在前面,因为编译器就是这样做的,简而言之就是val运算符A1运算符A2运算符A3运算符A… 。