#include <deque>
#include <algorithm>
#include <iostream>
using namespace std;
template <typename T>
double mean(T begin, T end)
{
double sum=0, count=0;
while(begin!=end)
{
sum+=*begin++;
count++;
}
return sum/count;
}
template <typename T>
double stan_dev(deque<T>&d){
double dev_sum=0,dev,dev_sqr,st_dev;
double mn=mean(d.begin(),d.end());
for(int it=0;it<(int)d.size();++it){
T val=d[it];
dev= val-mn;
dev_sqr = dev*dev;
dev_sum+=dev_sqr;
cout<<"\n Deviation at for age # "<<d[it]<<" is "<<dev;
cout<<"\n Deviation squared for age # " <<d[it]<<" is "<<dev_sqr;
cout<<"\n Summing up so far .. "<<dev_sum;
}
st_dev=sqrt((dev_sum/d.size()));
return st_dev;
}
int main()
{
deque<double> d;
d.push_back(1);
d.push_back(2);
d.push_back(3);
cout << endl << stan_dev(d);
return 0;
}