最近搞性能优化,常用的套路之一,就是能用数组替代STL容器,但是有与STL相同的接口
从开源库里找,估计能找到不少,但是自己现实一个也很快。
template<class T, int N>
class MyFixedSizeQueueBase
{
protected:
T m_arr[N];
int m_iElementNum;
int m_iFirst;
int m_iLast;
public:
MyFixedSizeQueueBase()
{
clear();
}
void clear()
{
m_iElementNum = 0;
m_iFirst = 0;
m_iLast = 0;
}
//不停的push导致溢出的问题,这里不处理// 丢掉新的 还是丢掉旧的 可继承一个新的类
void push(const T & node)
{
assert(m_iElementNum < N);
m_arr[m_iLast] = node;
++m_iLast;
if (m_iLast >= N)
{
m_iLast = 0;
}
++m_iElementNum;
}
void pop()
{
assert(m_iElementNum > 0);
++m_iFirst;
if (m_iFirst >= N)
{
m_iFirst = 0;
}
--m_iElementNum;
}
const T & front() const
{
assert(m_iElementNum > 0);
return m_arr[m_iFirst];
}
int size() const
{
assert(m_iElementNum >= 0);
return m_iElementNum;
}
const T & operator[](int iIndex) const
{
assert(iIndex >= 0);
assert(iIndex < m_iElementNum);
return m_arr[(m_iFirst + iIndex) % N];
}
bool empty() const
{
return m_iElementNum == 0;
}
};
template<class T, int N>
class MyFixedSizeQueue :public MyFixedSizeQueueBase<T, N>
{
};