博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
adjacent_diffenerce
阅读量:7103 次
发布时间:2019-06-28

本文共 2168 字,大约阅读时间需要 7 分钟。

版本1:

template 
OutputIterator adjacent_diffenerce(InputIterator first, InputIterator last, OutputIterator result){ if(first == last) return result; *result = *first;//首先记录第一个元素 return __adjacent_diffenerce(first, last, result, value_type(first)); //但是以上操作可以不需要传递调用,可以改用以下写法(整个函数): //if (first == last) return result; //*result = *first; //iterator_traits
::value_type value = *first; //while (++first != last) //走过整个区间 //{…以下同 __adjacent_diffenerce的对应内容 }template
OutputIterator __adjacent_diffenerce(InputIterator first, InputIterator last, OutputIterator result, T*){ T value = *first; while (++first != last) { T tmp = *first; *++result = tmp - value; value = tmp; } return ++result;}

 

版本2:

template 
OutputIterator adjacent_diffenerce(InputIterator first, InputIterator last, OutputIterator result, BinaryOperation binary_op){ if(first == last) return result; *result = *first;//首先记录第一个元素 return __adjacent_diffenerce(first, last, result, value_type(first), binary_op);}template
OutputIterator __adjacent_diffenerce(InputIterator first, InputIterator last, OutputIterator result, T*, BinaryOperation binart_op){ T value = *first; while (++first != last) { T tmp = *first; *++result = binary_op(tmp, value);//将相邻两元素的运算结果,赋值给目的端 value = tmp; } return ++result;}

  算法 adjacent_difference 用来计算 [first,last)中相邻元素的差额。也就是说,它将 *first 赋值给 *result,并针对 [first+1,last) 内1每个元素的迭代器 i ,将 *i - * ( i - 1 ) 的值赋值给 *( result + ( i - first ) )。

 

  注意,你可以采用就地 (in place)运算方式,也就是令 result 等于 first。是的,在这种情况下它是一个质变算法。

 

  “储存第一元素之值,然后储存后继元素之差值”。这种做法很有用,因为这么一来便有足够的信息可以重建输入区间的原始内容。如果加法与减法的定义一如常规定义,那么 adjacent_difference与 partial_sum互为逆运算。这意思是,如果对区间值 1,2,3,4,5 执行adjacent_difference,获得结果为1,1,1,1,1,再对此结果执行partial_sum,便会获得原始区间值1,2,3,4,5。

 

  第一版本使用 operator-来计算差额,第二版本采用外界提供的二元仿函数。第一个版本针对[first,last)中的每个迭代器 i ,将*i - * ( i - 1 ) 赋值给*( result + ( i - first )),第二版本则是将binary_op( * i, *( i - 1))的运算结果赋值给 * (result + ( i - first ))。

转载于:https://www.cnblogs.com/Zhoier-Zxy/p/8321290.html

你可能感兴趣的文章
【BZOJ】1046: [HAOI2007]上升序列(dp)
查看>>
罗兰管弦乐音色表【中英文对照】 ----转载
查看>>
关于Boot应用中集成Spring Security你必须了解的那些事
查看>>
绑定到列表的指定元素
查看>>
Android RecyclerView使用GridLayoutManager导致间隙变大的问题
查看>>
如何使用jackson美化输出json/xml
查看>>
如何实现测试系统题目的自动推荐?
查看>>
oracle的case when的用法和decode函数的用法
查看>>
在Unity中对Lua进行调试
查看>>
850 USB 烧录模式
查看>>
用Java取指定时区的时间 北京时间,纽约时间,班加罗尔时间
查看>>
sam9260 闲鱼
查看>>
深度优化LNMP之PHP
查看>>
玩转git分支
查看>>
php访问mysql 封装
查看>>
【Objective-C】04-第一个OC程序解析
查看>>
ios的自动转屏
查看>>
【C】——fread函数和read函数的区别
查看>>
js中push和join方法使用介绍
查看>>
Webservices-2.C#创建web服务,及引用访问、代码访问
查看>>