#include using namespace std; //------- int accumulate(int t[], int n, int init) { for(int i = 0; i < n; i++) init = init + t[i]; return init; } int accumulate(int* first, int* last, int init) { while(first != last) init = init + *first++; return init; } //------- template T accumulate_versionTemplate(T t[], int n, T init) { for(int i = 0; i < n; i++) init = init + t[i]; return init; } template T accumulate_versionTemplate(T* first, T* last, T init) { while(first != last) init = init + *first++; return init; } //------- template T accumulate(T t[], int n, T init, BinaryOperation op) { for(int i = 0; i < n; i++) init = op(init,t[i]); return init; } template T accumulate(T* first, T* last, T init, BinaryOperation op) { while(first != last) init = op(init,*first++); return init; } //------- int add(int x, int y) { return x + y; } int mult(int x, int y) { return x * y; } int main(void) { int array[] = { 1, 3, 5, 7, 9, 11, 2, 6 }; // utilisation cout << accumulate(array, 8, 0) << endl; cout << accumulate(array, array+8, 0) << endl; cout << "---" << endl; cout << accumulate_versionTemplate(array, 8, 0) << endl; cout << accumulate_versionTemplate(array, array+8, 0) << endl; cout << "---" << endl; cout << accumulate(array, 8, 0, add) << endl; cout << accumulate(array, 8, 1, mult) << endl; cout << "---" << endl; cout << accumulate(array, array+8, 0, add) << endl; cout << accumulate(array, array+8, 1, mult) << endl; return 0; }