| 类别:算法 | 组件类型:函数 |
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第一个版本使用operator-来计算差值,第二个版本使用用户提供的二元函数。在第一个版本中,对于每个迭代器i在范围[first + 1, last), *i - *(i - 1)被赋值给*(result + (i - first))。在第二个版本中,赋值给*(result + 1)的值改为binary_op(*i, *(i - 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_difference和partial_sum互为逆运算。
[2] 注意result允许与first相同。这对于“就地”计算差值很有用。