#include<iostream>
#include<vector>
#include<list>
using namespace std;

template <class InputIterator, class T>
T accumulate(InputIterator first, InputIterator last, T init) {
T total=init;
 for( ; first != last;++first) {
  total+= *first;
 }
return total;
}


main() {

  list<int> lista;

  lista.push_back(1);
  lista.push_back(2);
  lista.push_back(3);
  lista.push_back(4);

  cout<<accumulate(lista.begin(),lista.end(),0)<<endl;

  vector<double> wektor;

  wektor.push_back(1.1);
  wektor.push_back(2.1);
  wektor.push_back(3.1);
  wektor.push_back(4.1);

  cout<<accumulate(wektor.begin(),wektor.end(),0)<<endl;
   /*bÅ?ad : przekazanie zera jako ostatniego argumentu\ 
     spowoduje Å¼e za T bedzie  podstawiony int\ 
     czyli zmienna toatl teÅ¼ bÄ?dzie typu int 
   */

  cout<<accumulate(wektor.begin(),wektor.end(),0.0)<<endl;


}
