SGI

adjacent_difference

类别:算法 组件类型:函数

原型

Adjacent_difference是一个重载名称;实际上有两个adjacent_difference函数。
template <class InputIterator, class OutputIterator>
OutputIterator adjacent_difference(InputIterator first, InputIterator last, 
                                   OutputIterator result);

template <class InputIterator, class OutputIterator, class BinaryFunction>
OutputIterator adjacent_difference(InputIterator first, InputIterator last,
                                   OutputIterator result,
                                   BinaryFunction binary_op);

描述

Adjacent_difference计算范围中相邻元素的差值[first, last)。也就是说,*first被赋值给*result [1],并且,对于范围内的每个迭代器i在范围[first + 1, last)中,*i*(i - 1)被赋值给*(result + (i - first)). [2]

的差值。adjacent_difference第一个版本使用operator-来计算差值,第二个版本使用用户提供的二元函数。在第一个版本中,对于每个迭代器i在范围[first + 1, last), *i - *(i - 1)被赋值给*(result + (i - first))。在第二个版本中,赋值给*(result + 1)的值改为binary_op(*i, *(i - 1)).

定义

定义在标准头文件numeric中,以及非标准向后兼容头文件algo.h中。

类型要求

对于第一个版本对于第二个版本

中的类型。

复杂度

线性。如果[first, last)是空范围,则二元运算应用次数为零,否则正好为(last - first) - 1次应用。

示例

int main()
{
  int A[] = {1, 4, 9, 16, 25, 36, 49, 64, 81, 100};
  const int N = sizeof(A) / sizeof(int);
  int B[N];

  cout << "A[]:         ";
  copy(A, A + N, ostream_iterator<int>(cout, " "));
  cout << endl;
  
  adjacent_difference(A, A + N, B);
  cout << "Differences: ";
  copy(B, B + N, ostream_iterator<int>(cout, " "));
  cout << endl;

  cout << "Reconstruct: ";
  partial_sum(B, B + N, ostream_iterator<int>(cout, " "));
  cout << endl;
}

注释

[1] 存储第一个元素的值以及仅存储差值是有用的原因是,这提供了足够的信息来重构输入范围。特别是,如果加法和减法具有通常的算术定义,则adjacent_differencepartial_sum互为逆运算。

[2] 注意result允许与first相同。这对于“就地”计算差值很有用。

另请参阅

partial_sum, accumulate, inner_product, count
[Silicon Surf] [STL Home]
版权所有 © 1999 Silicon Graphics, Inc. 保留所有权利。 商标信息