STL之accumulate
头文件
#include <numeric>
函数的源码
template <class InputIterator, class T>
T accumulate (InputIterator first, InputIterator last, T init)
{
while (first!=last) { //当前位置不是区间的最后一个值
//累加值加上当前位置的值
init = init + *first; // or: init=binary_op(init,*first) for the binary_op version
++first; //当前位置后移
}
return init;
}
函数的思路
有一个初始值,对范围[first,last)内的元素,进行一个累加(或者自定义的操作)
函数的参数
first,last:迭代器的在序列中的初始和结束位置。范围为[first,last),包含第一个元素,但是不包含最后一个元素
init:累加的初始值
binary_op:自定义操作
返回值
返回初始值累加了[first,last)的元素之后的值
例子(参考了cplusplus.com)
// accumulate example
#include <iostream> // std::cout
#include <functional> // std::minus
#include <numeric> // std::accumulate
using namespace std;
//x:初始值,y:需要累加的值
int myfunction (int x, int y) {return x+2*y;}
struct myclass {
int operator()(int x, int y) {return x+3*y;}
} myobject;
int main () {
int init = 100;
int numbers[] = {10,20,30};
cout << "using default accumulate: ";
cout << accumulate(numbers,numbers+3,init);
cout << '\n';
cout << "using functional's minus: ";
cout << accumulate (numbers, numbers+3, init, minus<int>());
cout << '\n';
cout << "using custom function: ";
cout << accumulate (numbers, numbers+2, init, myfunction);
cout << '\n';
cout << "using custom object: ";
cout << accumulate (numbers, numbers+2, init, myobject);
cout << '\n';
return 0;
}