///////////////////////////////////////////////////////////////////// // MT4Q4.cpp - Max and Min of last n data items #include #include #include #include #include template class RunningInterval { public: RunningInterval(size_t n) : interval(n) {} void addDataPoint(const T& t); T min() const; T max() const; size_t size() const { return runningList.size(); } private: size_t interval; std::list runningList; T eval(bool wantMax) const; }; template void RunningInterval::addDataPoint(const T& t) { runningList.push_back(t); if(runningList.size() > interval) runningList.pop_front(); } template T RunningInterval::eval(bool wantMax) const { T max_ = -RAND_MAX; T min_ = RAND_MAX; std::list::const_iterator iter; for(iter=runningList.begin(); iter!=runningList.end(); ++iter) { if(max_ < *iter) max_ = *iter; if(min_ > *iter) min_ = *iter; } return wantMax ? max_ : min_; } template T RunningInterval::min() const { return eval(false); } template T RunningInterval::max() const { return eval(true); } 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 << ", min = " << std::setw(5) << runningInts.min(); std::cout << ", max = " << std::setw(5) << runningInts.max(); } std::cout << "\n\n"; }