adjacent_difference算法的主要用途是計算相鄰元素的差額
函數模闆
//adjacent_difference.h
template <typename InputIterator, typename OutputIterator>
OutputIterator adjacent_difference(InputIterator first, InputIterator last, OutputIterator result) {
if(first == last) {
return result;
}
*result = *first;
iterator_traits<InputIterator>::value_type value = *first;
while(++first != last) {
*++result = *first - value;
value = *first;
}
return ++result;
}
template <typename InputIterator, typename OutputIterator, typename BinaryOperation>
OutputIterator adjacent_difference(InputIterator first, InputIterator last, OutputIterator result, BinaryOperation binary_op) {
if(first == last) {
return result;
}
*result = *first;
iterator_traits<InputIterator>::value_type value = *first;
while(++first != last) {
*++result = binary_op(*first, value);
value = *first;
}
return ++result;
}
測試代碼:
//main.cpp
#include <iostream>
#include "adjacent_difference.h"
#include <vector>
#include <iterator>
using namespace std;
int main(void) {
int a[5] = {0, 1, 2, 3, 4};
vector<int> ivec(a, a+5);
ostream_iterator<int> oite(cout, " ");
adjacent_difference(ivec.begin(), ivec.end(), oite); // 0 1 1 1 1
cout << endl;
adjacent_difference(ivec.begin(), ivec.end(), oite, plus<int>()); // 0 1 3 5 7
system("pause");
return 0;
}