///////////////////////////////////////////////////////////////////// // MT1Q2.cpp #include #include #include #include #include template class RunningInterval { public: RunningInterval(size_t n) : interval(n) {} void addDataPoint(const T& t); T span(); T front() { return runningList.front(); } T back() { return runningList.back(); } size_t size() { return runningList.size(); } private: size_t interval; std::list runningList; int max_; int min_; }; template void RunningInterval::addDataPoint(const T& t) { runningList.push_back(t); if(runningList.size() > interval) runningList.pop_front(); } template T RunningInterval::span() { max_ = -RAND_MAX; min_ = RAND_MAX; std::list::iterator iter; for(iter=runningList.begin(); iter!=runningList.end(); ++iter) { if(max_ < *iter) max_ = *iter; if(min_ > *iter) min_ = *iter; } return max_ - min_; } 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 << ", diff = " << std::setw(5) << runningInts.span(); } std::cout << "\n front is " << runningInts.front(); std::cout << "\n back is " << runningInts.back(); std::cout << "\n\n"; } list length = 1, data = 12684, diff = 0 list length = 2, data = 29315, diff = 16631 list length = 3, data = 13542, diff = 16631 list length = 4, data = 15509, diff = 16631 list length = 5, data = 23791, diff = 16631 list length = 6, data = 10716, diff = 18599 list length = 7, data = 31894, diff = 21178 list length = 8, data = 19859, diff = 21178 list length = 8, data = 24075, diff = 21178 list length = 8, data = 17799, diff = 21178 list length = 8, data = 6875, diff = 25019 list length = 8, data = 13367, diff = 25019 list length = 8, data = 9735, diff = 25019 list length = 8, data = 14623, diff = 25019 list length = 8, data = 8112, diff = 17200 list length = 8, data = 16417, diff = 17200 list length = 8, data = 1874, diff = 15925 list length = 8, data = 2405, diff = 14543 list length = 8, data = 18595, diff = 16721 list length = 8, data = 5430, diff = 16721 list length = 8, data = 16522, diff = 16721 list length = 8, data = 15251, diff = 16721 list length = 8, data = 728, diff = 17867 list length = 8, data = 13721, diff = 17867 list length = 8, data = 11933, diff = 17867 front is 2405 back is 11933