STL之adjacent_difference

来源:互联网 发布:vip域名被百度收录 编辑:程序博客网 时间:2024/06/04 21:31

需要的头文件:
numeric

源码:

//版本1template <class _InputIterator, class _OutputIterator>_OutputIteratoradjacent_difference(_InputIterator __first,                    _InputIterator __last, _OutputIterator __result){  if (__first == __last) return __result;  *__result = *__first;  return __adjacent_difference(__first, __last, __result,                               __VALUE_TYPE(__first));}template <class _InputIterator, class _OutputIterator, class _Tp>_OutputIterator __adjacent_difference(_InputIterator __first, _InputIterator __last,                      _OutputIterator __result, _Tp*){  _Tp __value = *__first;  while (++__first != __last) {    _Tp __tmp = *__first;    *++__result = __tmp - __value;    __value = __tmp;  }  return ++__result;}//版本2template <class _InputIterator, class _OutputIterator, class _BinaryOperation>_OutputIterator adjacent_difference(_InputIterator __first, _InputIterator __last,                    _OutputIterator __result, _BinaryOperation __binary_op){  if (__first == __last) return __result;  *__result = *__first;  return __adjacent_difference(__first, __last, __result,                               __VALUE_TYPE(__first),                               __binary_op);}template <class _InputIterator, class _OutputIterator, class _Tp,           class _BinaryOperation>_OutputIterator__adjacent_difference(_InputIterator __first, _InputIterator __last,                       _OutputIterator __result, _Tp*,                      _BinaryOperation __binary_op) {  _Tp __value = *__first;  while (++__first != __last) {    _Tp __tmp = *__first;    *++__result = __binary_op(__tmp, __value);    __value = __tmp;  }  return ++__result;}

作用:
用来计算[first,last)中相邻元素的差额。其过程为:
存储第一元素之值,然后存储后继两两相邻元素之差值
通过二元仿函数,我们可以将它一般化为:
存储第一元素之值,然后存储后继两两相邻元素之运算值

例子:

#include <numeric>#include <vector>#include <iostream>#include <iterator>using namespace std;int main(){    int ia[5] = { 1,2,3,4,5 };    vector<int> iv(ia, ia + 5);    //作为输出    ostream_iterator<int> oiter(cout, " ");    //输出iv元素间的差值    adjacent_difference(iv.begin(), iv.end(), oiter);   //1 1 1 1 1    cout << endl;    //输出iv元素之间的两两相加的值    adjacent_difference(iv.begin(), iv.end(), oiter, [](int a, int b) {        return a + b;    });//1 3 5 7 9    cout << endl;}

注意:

  • 首先会存储第一元素之值

  • 二元仿函数中,参数有先后。第一个参数代表前面的元素,第二个参数代表后面的元素

0 0