版本1:

template <class InputIterator,class OutputIterator>
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<InputIterator>::value_type value = *first;//while (++first != last) //走过整个区间 //{…以下同 __adjacent_diffenerce的对应内容
}template <class InputIterator, class OutputIterator, class T>
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 <class InputIterator,class OutputIterator, class BinaryOperation>
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 <class InputIterator, class OutputIterator, class T, class BinaryOperation >
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

最新文章

  1. 牛客--追债之旅 两种解法
  2. oracle locked time,Oracle里面的用户smsdb无法登录 LOCKED(TIMED)
  3. 进一步考察与UI相关的安全漏洞-下
  4. kubernetes使用ansible快速构建集群
  5. jQuery 定位到某个元素
  6. 阿里云开发大会——体验云效智能代码补全
  7. DenyHosts教程:防暴力破解SSH密码
  8. 字符串以及内存操作相关函数
  9. 跨湖跨仓场景下如何实现海量数据分钟级分析
  10. Winform 下拉框绑定问题
  11. Treo 650使用专题及开发计划等
  12. android三国2,三国演义2单机版安卓
  13. 数据挖掘-高斯混合模型(多元)算法的R实现
  14. centos下载和安装mongodb
  15. 算法的复杂度度量--时间复杂度以及空间复杂度
  16. 冥想第二百五十六天。
  17. HTML语言中img标签的alt属性和title属性的作用与区别
  18. 2021年3月PHP免费自学最全教程来了
  19. 多台电脑共享键盘鼠标
  20. mysql表disable_[MySQL优化案例]系列 -- DISABLE/ENABLE KEYS的作用

热门文章

  1. Oracle官网下载历史版本软件
  2. 安卓开发学习5-6:布局管理器:布局管理器嵌套
  3. 诚之和:哔哩哔哩1.18亿拿下支付牌照
  4. 自我管理经典书籍推荐:除了《自我管理必读12篇》,这些书也不容错过
  5. 分享一个动态sql编写工具
  6. 【毕业设计】基于大数据的招聘职业爬取与分析可视化
  7. python normalize函数_opencv归一化函数normalize详解
  8. iPhone 检测 iPhone X 设备的几种方式和分辨率终极指南
  9. c语言脱验证,CCAR.适航符合性验证思路简述
  10. 模板元编程(TMP)