#ifndef MOVINGAVG_H #define MOVINGAVG_H #include template class MovingAVG { private: /** up to "size" elements */ std::vector values; /** track the current sum of the vector's values */ T curSum = 0; /** the number of elements to average */ int size; public: /** ctor */ MovingAVG(const int size) : size(size) {;} /** add a new value */ void add(const T val) { // add new value values.push_back(val); curSum += val; // too many values? if ((int) values.size() > size) { curSum -= values.front(); values.erase(values.begin()); } } /** get the current average */ T get() const { return curSum / values.size(); } /** get the number of used entries */ int getNumUsed() const { return (int) values.size(); } /** get number of entries to average */ int getSize() const { return size; } }; #endif // MOVINGAVG_H