1. template <class InputIterator, class T, class BinaryOperation> 
  2. T accumulate(InputIterator first, InputIterator last,  
  3.              T init, BinaryOperation binary_op) { 
  4.     for(; first != last; ++first) { 
  5.         init = binary_op(init, *first); 
  6.     return init;