本文版权归点A点C和博客园共有,欢迎转载,但必须保留此段声明,并给出原文连接,谢谢合作!!!

STL之accumulate用法小结

转自: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… 。

posted on 2013-08-22 14:33  点A点C  阅读(724)  评论(0编辑  收藏  举报

导航