版本1:

template < class InputIterator, class OutputIterator >
OutputIterator partial_sum(InputIterator first, InputIterator last, OutputIterator result)
{
if ( first == last)
return result;
*result = *first;
return __partial_sum(first, last, result, value_type(first));
} template <class InputIterator, class OutputIterator, class T>
OutputIterator __parital_sum(InputIterator first, InputIterator last, OutputIterator result, T*)
{
T value = *first;
while ( ++first != last)
{
value = value + *first;//前n个元素的总和
*++result = value;//指定给目的端
}
return ++result;
}

版本2:

template < class InputIterator, class OutputIterator, class BinaryOperation>
OutputIterator partial_sum(InputIterator first, InputIterator last, OutputIterator result, BinaryOperation binary_op)
{
if ( first == last)
return result;
*result = *first;
return __partial_sum(first, last, result, value_type(first), binary_op);
} template <class InputIterator, class OutputIterator, class T, OutputIterator result, T*, BinaryOperation binary_op>
OutputIterator __parital_sum(InputIterator first, InputIterator last, OutputIterator result, T*)
{
T value = *first;
while ( ++first != last)
{
value = binary_op ( value, *first);
*++result = value;
}
return ++result;
}

  算法partial_sum用来计算局部总和。他会将 *first 赋值给 *result,将 *first 和 *(first+1) 的和赋值给 * (result + 1),以此类推。注意,result可以等于 first,这使我们得以完成就地计算。在这种情况下它是一个质变算法。

  

  运算中的总和首先初始为 *first,然后赋值给 *result 。对于[first,last) 中每个迭代器 i ,从头至尾依序执行sum = sum + *i  (第一版本)或 sum = binary_op(sum, *i)(第二版本),然后再将sum赋值给 *(result+( i - first))。此式所用之二元仿函数不必满足交换律和结合律。所有运算行为的顺序都有明确设定。

  

  本算法返回输出区间的最尾端位置:result + ( last - first )。

  

  如果加法与减法的定义一如常规定义,那么 partial_sum 与先前介绍过的 adjacent_difference 互为逆运算。这里的意思是,如果对区间值1,2,3,4,5执行parital_sum,获得的结果为1,3,6,10,15,再对此结果执行adjacent_difference,便会获得原始区间值1,2,3,4,5。

partial_sum的更多相关文章

  1. 一般化数值算法(accumluate,inner_product,partial_sum,adjacent_difference)

    accumulate template<class InputIterator, class T> T accumulate( InputIterator _First, InputIte ...

  2. C++STL 中的数值算法(iota、accumulate、adjacent_difference、inner_product、partial_sum)

    以下算法均包含在头文件 numeric 中 ##1.iota 该函数可以把一个范围内的序列从给定的初始值开始累加 先看用法. 例: 假设我需要一个长度为10,从5开始递增的序列 vector<i ...

  3. UVALive 7141 BombX(离散化+线段树)(2014 Asia Shanghai Regional Contest)

    题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&category=6 ...

  4. C++的STL

    今天,看一段代码的时候发现只一句话就做了个排序,是这样的: sort(rotateArray.begin(),rotateArray.end()); 很震惊,后来查了一下sort的用法, sort函数 ...

  5. Bjarne Stroustrup对C++程序员的忠告

    转自:http://blog.csdn.net/adm_qxx/archive/2007/05/20/1617488.aspx  第1章 致读者  [1] 在编写程序时,你是在为你针对某个问题的解决方 ...

  6. STL---总结

    文章转自:http://www.cnblogs.com/biyeymyhjob/archive/2012/07/22/2603525.html 一.STL的六大组件 容器(Container),是一种 ...

  7. STL中的算法小结

    ()要运用STL的算法,首先必须包含头文件<algorithm>,某些STL算法用于数值处理,因此被定义于头文件<numeric> ()所有STL算法都被设计用来处理一个或多个 ...

  8. c++模板库(简介)

    目 录 STL 简介 ......................................................................................... ...

  9. C++Primer STL算法

    //1.概览: // A:beg和end是表示元素范围的迭代器. // B:beg2是表示第二个输入序列开始位置的迭代器.end2表示第二个序列的末尾位置,若没有end2,则假定beg2表示的序列至少 ...

随机推荐

  1. 基本够用的php.ini配置文件(CentOS7)

    [PHP] engine = On short_open_tag = Off asp_tags = Off precision = output_buffering = zlib.output_com ...

  2. CAP二十年:“规则”变了

    本文是原文https://www.cnblogs.com/cobbliu/p/7494961.html的译文,原链接:http://www.infoq.com/cn/articles/cap-twel ...

  3. PHP-问题处理Fatal error: Uncaught Error: Call to undefined function mb_strlen()

    1.问题 今天重新安装了ubuntu,PHP,MySQL,Apache,到测试CMS项目时发生一个错误: Fatal error: Uncaught Error: Call to undefined ...

  4. php获取客户端IP地址的方法

    参考:https://www.cnblogs.com/rendd/p/6183094.html <?php function getip() { //strcasecmp 比较两个字符,不区分大 ...

  5. Java 设计模式专栏

    Java 设计模式之工厂模式学习心得 转:Java 设计模式之单例模式 转:  Java设计模式之建造者模式 转:Java设计模式之代理模式

  6. 记录php中一种骚操作

    $options = array( 'config' => array( 'aaa' => 111, 'bbb' => 222, ), 'headers' => array( ...

  7. TF的模型文件

    TF的模型文件 标签(空格分隔): TensorFlow Saver tensorflow模型保存函数为: tf.train.Saver() 当然,除了上面最简单的保存方式,也可以指定保存的步数,多长 ...

  8. Halcon 彩色图片通道分割处理

    1.RGB通道:R红色,G绿色,B蓝色:R.G.B各占一个字节,取值范围在0—255:可代表的颜色数256*256*256==2^24 黑色区域是:R=G=B=0;   白色区域是:R=G=B=255 ...

  9. IIS 请求 超时设置

    asp.net 默认的 session state 模式是 in proc(进程内),数据是在网站的应用程序池里面保存的.这样在 web.config 设置的超时时间,是在应用程序池没有发生回收的基础 ...

  10. 本人AI知识体系导航 - AI menu

    Relevant Readable Links Name Interesting topic Comment Edwin Chen 非参贝叶斯   徐亦达老板 Dirichlet Process 学习 ...