///////////////////////////////////////////////////////////////////// // 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"; } list length = 1, data = 14640, avg = 14640 list length = 2, data = 12315, avg = 13477 list length = 3, data = 31813, avg = 19589 list length = 4, data = 11514, avg = 17570 list length = 5, data = 9069, avg = 15870 list length = 6, data = 3531, avg = 13813 list length = 7, data = 28476, avg = 15908 list length = 8, data = 3126, avg = 14310 list length = 8, data = 18582, avg = 14803 list length = 8, data = 5122, avg = 13904 list length = 8, data = 16584, avg = 12000 list length = 8, data = 6983, avg = 11434 list length = 8, data = 32649, avg = 14381 list length = 8, data = 29936, avg = 17682 list length = 8, data = 30178, avg = 17895 list length = 8, data = 14477, avg = 19313 list length = 8, data = 9532, avg = 18182 list length = 8, data = 29066, avg = 21175 list length = 8, data = 1084, avg = 19238 list length = 8, data = 6468, avg = 19173 list length = 8, data = 5898, avg = 15829 list length = 8, data = 14989, avg = 13961 list length = 8, data = 16177, avg = 12211 list length = 8, data = 21160, avg = 13046 list length = 8, data = 10058, avg = 13112 front is 29066 back is 10058