///////////////////////////////////////////////////////////////////// // 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"; }