#include <algorithm> #include <vector> #include <math.h> #include <iostream> using namespace std; int double_val(int var) { return var + var; } int difference(int var1, int var2) { return abs(var1 - var2); } /************************************************************************/ /* */ /************************************************************************/ // TEMPLATE FUNCTION transform WITH UNARY OP template<class _InIt, class _OutIt, class _Fn1, class _InOutItCat> inline _OutIt my_transform(_InIt _First, _InIt _Last, _OutIt _Dest, _Fn1 _Func) { // transform [_First, _Last) with _Func _DEBUG_RANGE(_First, _Last); _DEBUG_POINTER(_Dest); _DEBUG_POINTER(_Func); for (; _First != _Last; ++_First, ++_Dest) *_Dest = _Func(*_First); return (_Dest); } template<class _InIt1, class _InIt2, class _OutIt, class _Fn2> inline _OutIt my_transform(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2, _OutIt _Dest, _Fn2 _Func) { // transform [_First1, _Last1) and [_First2, _Last2) with _Func _DEBUG_RANGE(_First1, _Last1); _DEBUG_POINTER(_Dest); _DEBUG_POINTER(_Func); for (; _First1 != _Last1; ++_First1, ++_First2, ++_Dest) *_Dest = _Func(*_First1, *_First2); return (_Dest); } int main() { int ia[] = {3,5,8,13,21}; vector<int> vec(5); ostream_iterator<int> outfile(cout, " "); cout << "original array values:"; copy(ia, ia + 5, outfile); cout << endl; cout << "transform each element by doubling: "; transform(ia, ia + 5, vec.begin(), double_val ); copy(vec.begin(), vec.end(), outfile); cout << endl; cout << "transform each element by difference: "; //transform(ia, ia + 5, vec.begin(),outfile, difference ); my_transform(vec.begin(), vec.end(), ia, outfile, difference ); cout << endl; return 0; }