天天看點

adjacent_difference算法

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;  
}