///////////////////////////////////////////////////////////////////// // CircBuff.cpp - Answer to Midterm #1, Question #1 // // // // Jim Fawcett, CSE687 - Object Oriented Design, Spring 2007 // ///////////////////////////////////////////////////////////////////// #include #include #include #include #include template class CircBuff { public: typename typedef std::list::const_reverse_iterator iterator; CircBuff(size_t n) : interval(n) {} void addDataPoint(const T& t); T front() const { return buffList.back(); } T back() const { return buffList.front(); } size_t size() const { return buffList.size(); } iterator begin() { return buffList.rbegin(); } iterator end() { return buffList.rend(); } private: size_t interval; std::list buffList; }; template void CircBuff::addDataPoint(const T& t) { buffList.push_back(t); if(buffList.size() > interval) buffList.pop_front(); } void main() { CircBuff demCircBuff(8); srand( (unsigned)time(0) ); for(int i=0; i<25; ++i) { int data = rand(); demCircBuff.addDataPoint(data); std::cout << "\n list length = " << std::setw(2) << demCircBuff.size(); std::cout << ", data = " << std::setw(5) << data; } std::cout << "\n front is " << demCircBuff.front(); std::cout << "\n back is " << demCircBuff.back(); std::cout << "\n\n"; CircBuff::iterator iter; for(iter=demCircBuff.begin(); iter!=demCircBuff.end(); ++iter) std::cout << "\n " << *iter; std::cout << "\n\n"; }