码迷,mamicode.com
首页 > 其他好文 > 详细

accumulate

时间:2018-01-20 10:59:41      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:获得   操作符   ast   for   nbsp   代码   iterator   span   就会   

 

咱们来介绍一下STL里的一个功能强大的函数:accumulate。意思是自动加和,所以听这个名字就会感觉它能代替许多for或者递归来加和的代码,下面来看它的实现:

 

版本1:

template <class InputIterator,class T>
T accumulate(InputIterator first,InputIterator last,T init,BinaryOperation binart_op)
{
    for( ;first != last; ++first)
        init = briary_op(init,*first);//对每个元素执行二元操作
    return init;
}

 

 

这种版本比较复杂也不好理解,本人也不常用这种,咱来看看版本2:

template <class InputIterator,class T>
T accumulate(InputIterator first,InputIterator last,T init)
{
    for( ; first != last; first++)
        init = init + *first;//将每个元素值累加到初值上
    return init;
}

  

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

  

  式中的二元操作符不必满足交换律和结合律。是的,accumulate的行为顺序有明确定义:先将init初始化,然后针对[first,last)区间中的每一个迭代器i,依序执行init = init + *i(版本2)或init = binary_op(init, *i)(版本2)。

accumulate

标签:获得   操作符   ast   for   nbsp   代码   iterator   span   就会   

原文地址:https://www.cnblogs.com/Zhoier-Zxy/p/8319849.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!