性能优化,用数组实现队列queue功能

时间:2023-01-31 17:45:01

最近搞性能优化,常用的套路之一,就是能用数组替代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>
{
 
};