#include using namespace std; struct MovingAverage { queue que; // push inserts element at end // pop removes first element size_t windowSize; double sum; MovingAverage(size_t size) { windowSize = size; } void add(double val) { sum += val; que.push(val); if (que.size() > windowSize) { sum -= que.front(); que.pop(); } } double getAvg() { return que.size() == windowSize ? sum/windowSize : 0; } }; int main(void) { vector testCase = { 1,2,3,4,5,6,7,8,9 }; MovingAverage calc(3); for (auto i: testCase) { calc.add(i); cout << fixed << setprecision(1); cout << "tick: " << i << " movingAvg: " << calc.getAvg() << endl; } return 0; }