类别:算法 | 组件类型:函数 |
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相同。这对于“就地”计算差值很有用。