c++隊列類模板的實現


//隊列類模板定義
template <class POINT_TYPE,int MAX_POINTS> 
class VarQueue
{
public:
    VarQueue()
    {
        m_MaxCount=MAX_POINTS;
        m_Count=0;
    }
    VarQueue(unsigned int MaxCount)
    {
        if(MaxCount>MAX_POINTS)
            m_MaxCount=MAX_POINTS;
        else
         m_MaxCount=MaxCount;
        m_Count=0;
    }
public:
    //出隊處理,先進先出
    unsigned int PopPoint(POINT_TYPE *Point);
    //入隊處理,追加在隊的末尾
    unsigned int AppendPoint(const POINT_TYPE &Point);
    //取得某結點的值
bool GetPoint(POINT_TYPE *Point,unsigned int Position)const;
//取得結點數
unsigned int GetCount()const;
    //清空隊列
    void ClearQueue();
private:
    //隊列的最大結點數
    unsigned int m_MaxCount;
    //隊列的實際結點數
    unsigned int m_Count;
    //保存結點的數組
    POINT_TYPE m_Queue[MAX_POINTS];
};

/////////////////隊列元素類定義
class CElement
{
public:
    CElement()
    {
        fValue=0.0;
    }
    CElement(float value)
    {
        fValue=value;
    }
    CElement& operator =(int value)
    {
      fValue=(float)value;
      return *this;
    }
    CElement& operator =(float value)
    {
      fValue=value;
      return *this;
    }
    CElement& operator =(CElement elem)
    {
      fValue=elem.fValue;
      return *this;
    }
    operator float()
    {
        return fValue;    
    }
    float GetValue()const
    { 
        return fValue;
    }
private:
    float fValue;
};
#include "stdio.h"
#include "Queue.h"
//隊列類模板的實現
template <class POINT_TYPE,int MAX_POINTS>
unsigned int VarQueue<POINT_TYPE,MAX_POINTS>::PopPoint(POINT_TYPE *Point)
{
    unsigned int i=0;
    if(m_Count>0)
    {  
        if(NULL!=Point)
            *Point=m_Queue[0];
        for(i=1;i<m_Count;i++)
        {
            m_Queue[i-1]=m_Queue[i];
        }
        m_Count--;
    }
    return m_Count;
}

template <class POINT_TYPE,int MAX_POINTS>
unsigned int VarQueue<POINT_TYPE,MAX_POINTS>::AppendPoint(const POINT_TYPE &Point)
{
    if(m_Count<m_MaxCount)
        m_Queue[m_Count++]=Point;        
    
    return m_Count;
}

template <class POINT_TYPE,int MAX_POINTS>
bool VarQueue<POINT_TYPE, MAX_POINTS>::GetPoint(POINT_TYPE *Point,unsigned int Position)const
{
    if(Position<m_Count && NULL!=Point)
    {      
        *Point=m_Queue[Position];
        return true;
    }
    else 
        return false;
}

template <class POINT_TYPE,int MAX_POINTS>
inline unsigned int  VarQueue<POINT_TYPE,MAX_POINTS>::GetCount()const
{
    return m_Count;
}

template <class POINT_TYPE,int MAX_POINTS>
void VarQueue<POINT_TYPE,MAX_POINTS>::ClearQueue()
{ 
    m_Count=0;
}

int main(int argc, char* argv[])
{
    /*將模板實例化為最多容納50個元素的整型隊列,類名為VarQueue<int,50>,
    由該類實例化的對象名為iQueue */
    VarQueue<int,50> iQueue(20);
    /*將模板實例化為最多容納50個元素的CElement型隊列,類名為VarQueue <CElement,30>,
    由該類實例化的對象名為fQueue */
    VarQueue<CElement,30> fQueue(10);
    int ival=0;
    unsigned count=0;;
    CElement fval=1.0;
    
    for(unsigned int i=0;i<4;i++)
        iQueue.AppendPoint(i);
    
    count=iQueue.GetCount();
    for( i=0;i<count;i++)
    {
        iQueue.PopPoint(&ival);
        fQueue.AppendPoint((float)ival);
    }
    for( i=0;i<fQueue.GetCount();i++)
    {
        fQueue.GetPoint(&fval,i);
        printf("%4.2f\n",fval.GetValue());
    }
    iQueue.ClearQueue();
    fQueue.ClearQueue();
    return 0;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM