GrpcPrint/PrintS/utils/Average.h

116 lines
1.7 KiB
C++

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