#pragma once #include #include template class Average { public: ~Average(); void AddValue(T value); T GetAverage(void); T GetMin(); private: std::list m_Values; }; template Average::~Average() { m_Values.clear(); } template void Average::AddValue(T value) { if (m_Values.size() < N) { m_Values.push_back(value); } else { m_Values.pop_front(); m_Values.push_back(value); } } template T Average::GetAverage(void) { T tmp = 0; for (auto it = m_Values.begin(); it != m_Values.end(); it++) tmp += *it; return tmp / m_Values.size(); } template T Average::GetMin(void) { T tmp = 1000000; for (auto it = m_Values.begin(); it != m_Values.end(); it++) { T tem2 = *it; if (tem2 class Average2 { public: ~Average2(); void SetValueSize(int isize); void AddValue(T value); void ClearValues(); T GetAverage(void); private: int m_ValueSize; std::list m_Values; }; template Average2::~Average2() { m_Values.clear(); } template void Average2::SetValueSize(int isize) { m_Values.clear(); m_ValueSize = isize; } template void Average2::ClearValues() { m_Values.clear(); } template void Average2::AddValue(T value) { if (m_Values.size() < m_ValueSize) { m_Values.push_back(value); } else { m_Values.pop_front(); m_Values.push_back(value); } } template T Average2::GetAverage(void) { T tmp = 0; for (auto it = m_Values.begin(); it != m_Values.end(); it++) { tmp += (*it); } return tmp / m_Values.size(); }