stl中的accumulate算法

先看个小实例:

#include<iostream>

#include<numeric>

#include<vector>

#include<functional>

using namespace std;

int main(){

int ia[5]={1,2,3,4,5};

vector<int>iv(ia,ia+5);

cout<<accumulate(iv.begin(),iv.end(),0)<endl;

//15,   0+1+2+3+4+5;

cout<<accumulate(iv.begin(),iv.end(),o,minus<int>())<<endl;

//-15   0-1- 2- 3- 4- 5

}

看看accumulate的源码:

第一个版本的accumulate:

template<class InputIterator, class T>

T accumulate(InputIterator first,InputIterator last,T init){

for( ; first!=last; ++first)

init=init+ *first;

return init;

}

第二版本的accumulate:

template<class InputIterator, class T, BinaryOperation>

T accumulate(InputIterator first, InputIterator last,T init,BinaryOperation binary_op){

for( ; first != last; ++first)

init=binary_op(init, *first);

return init;

}

算法accumulate用来计算init和[first,last)内所有元素的总和。注意,你一定得提供一个初始值init, 这么做的原因之一是当[first,last)为空区间时,仍能获得一个明确定义的值。如果要用accumulate计算区间内所有数值的和,应将init设为0;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值