///////////////////////////////////////////////////////////////////// // 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"; } list length = 1, data = 15189, min = 15189, max = 15189 list length = 2, data = 15807, min = 15189, max = 15807 list length = 3, data = 18338, min = 15189, max = 18338 list length = 4, data = 23687, min = 15189, max = 23687 list length = 5, data = 5214, min = 5214, max = 23687 list length = 6, data = 7862, min = 5214, max = 23687 list length = 7, data = 27080, min = 5214, max = 27080 list length = 8, data = 2863, min = 2863, max = 27080 list length = 8, data = 7249, min = 2863, max = 27080 list length = 8, data = 20823, min = 2863, max = 27080 list length = 8, data = 24503, min = 2863, max = 27080 list length = 8, data = 14383, min = 2863, max = 27080 list length = 8, data = 16429, min = 2863, max = 27080 list length = 8, data = 24439, min = 2863, max = 27080 list length = 8, data = 22909, min = 2863, max = 24503 list length = 8, data = 10924, min = 7249, max = 24503 list length = 8, data = 25739, min = 10924, max = 25739 list length = 8, data = 11544, min = 10924, max = 25739 list length = 8, data = 13732, min = 10924, max = 25739 list length = 8, data = 26452, min = 10924, max = 26452 list length = 8, data = 23158, min = 10924, max = 26452 list length = 8, data = 27115, min = 10924, max = 27115 list length = 8, data = 15532, min = 10924, max = 27115 list length = 8, data = 19965, min = 11544, max = 27115 list length = 8, data = 5758, min = 5758, max = 27115