template<class InIt, class T>
T accumulate(InIt first, InIt last, T val);
template<class InIt, class T, class Pred>
T accumulate(InIt first, InIt last, T val, Pred pr);
The first template function repeatedly replaces val with val + *I, for each value of the InIt iterator I in the interval
[first, last). It then returns val.
The second template function repeatedly replaces val with pr(val, *I), for each value of the InIt iterator I in the
interval [first, last). It then returns val.
See the related sample program.