///////////////////////////////////////////////////////////////////// // MT3Q2.cpp #include #include #include #include #include template class RunningInterval { public: RunningInterval(size_t n) : interval(n) {} void addDataPoint(const T& t); T avg() const; T front() const { return runningList.front(); } T back() const { return runningList.back(); } size_t size() const { return runningList.size(); } private: size_t interval; std::list runningList; }; template void RunningInterval::addDataPoint(const T& t) { runningList.push_back(t); if(runningList.size() > interval) runningList.pop_front(); } template T RunningInterval::avg() const { T avg_ = T(0); std::list::const_iterator iter; for(iter=runningList.begin(); iter!=runningList.end(); ++iter) { avg_ += *iter; } return avg_/static_cast(size()); } void main() { RunningInterval runningInts(8); srand( (unsigned)time(0) ); for(int i=0; i<25; ++i) { int data = rand(); runningInts.addDataPoint(data); std::cout << "\n list length = " << std::setw(2) << runningInts.size(); std::cout << ", data = " << std::setw(5) << data; std::cout << ", avg = " << std::setw(5) << runningInts.avg(); } std::cout << "\n front is " << runningInts.front(); std::cout << "\n back is " << runningInts.back(); std::cout << "\n\n"; }