// RunningAvg.cpp #include #include template class RunAvg { public: RunAvg(unsigned int N); void add(const T& t); T avg() const; private: RunAvg(const RunAvg&); RunAvg& operator=(const RunAvg&); unsigned int _N; std::list store; }; template RunAvg::RunAvg(unsigned int N) : _N(N) {} template void RunAvg::add(const T& t) { store.push_back(t); if(store.size() > _N) store.pop_front(); } template T RunAvg::avg() const { if(store.size() == 0) return 0; T sum = 0; std::list::const_iterator iter; for(iter=store.begin(); iter!=store.end(); ++iter) sum += *iter; return sum/store.size(); } int main() { std::cout << "\n Testing Running Average " << "\n =========================\n"; RunAvg ra(4); for(int i=0; i<10; i++) { ra.add(i); std::cout << "\n " << ra.avg(); } std::cout << "\n\n"; }