pub struct MovingAverage {
queue: std::collections::VecDeque<i32>,
capacity: usize,
sum: i32,
}
impl MovingAverage {
pub fn new(size: usize) -> Self {
MovingAverage {
queue: std::collections::VecDeque::with_capacity(size),
capacity: size,
sum: 0,
}
}
pub fn next(&mut self, val: i32) -> f64 {
if self.queue.len() == self.capacity {
if let Some(old) = self.queue.pop_front() {
self.sum -= old;
}
}
self.queue.push_back(val);
self.sum += val;
self.sum as f64 / self.queue.len() as f64
}
pub fn queue(self) -> std::collections::VecDeque<i32> {
self.queue
}
}