C++ 学习练手 - 数组型队列的模板实现

本文介绍了一个简单的C++泛型队列类实现,包括基本的操作如入队、出队及获取队首元素等,并提供了队列状态的输出方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 
#ifndef __QUEUEPRACTICE_H__
#define __QUEUEPRACTICE_H__ 1
namespace FengChen
{
    template 
<class Type> class Queue;

    template 
<class T>
    std::ostream
& operator<<(std::ostream& os, const Queue<T>& Q)
    
{
        os
<<"Queue:<Tail-- ";
        
for(int i = 0; i < Q.m_Count; i++)
            os
<<Q.m_Array[ (Q.m_Head - i) % Q.m_Capacity ]<<" ";

        
if(Q.m_Count < 1) os<<"Empty!";
        os
<<" --Head>";

        
return os;
    }

    
    template 
<class Type> class Queue
    
{
        friend std::ostream
& operator<< <Type> (std::ostream&const Queue<Type>&);
    
public:
        Queue(unsigned 
int Capacity): m_Head(-1), m_Array(0),m_Capacity(Capacity),m_Count(0)
        
{
            
if(m_Capacity < 2throw std::range_error("Invalid Queue Length, too small!");            
            
if( (m_Array = new Type[m_Capacity]) == 0throw std::runtime_error("Not enough memory!");
        }


        Queue(): m_Head(
-1), m_Array(0),m_Capacity(64),m_Count(0)
        
{
            
if( (m_Array = new Type[m_Capacity]) == 0throw std::runtime_error("Not enough memory!");
        }



        
~Queue()
        
{
            delete [] m_Array;
        }


        
const Type& Head() const
        
{
            
if(m_Count < 1throw std::domain_error("Empty Queue!");
            
return m_Array[m_Head];
        }


        
void Enqueue(const Type& value)
        
{
            
if (m_Count >= m_Capacity) throw std::domain_error("Queue is full!");

            m_Array[(
++m_Head) % m_Capacity] = value;
            m_Count
++;
        }


        
void Dequeue(Type& item )
        
{
            
if(this->IsEmpty ()) throw std::domain_error("Queue is empty!");

            item 
= m_Array[m_Tail()];
            m_Count
--;
        }


        
bool IsEmpty()return m_Count == 0; }

        
bool IsFull()return m_Count == m_Capacity; }

        size_t Count()
return m_Count; }
    
private:
        unsigned 
int m_Capacity;
        unsigned 
int  m_Count;
        Type
* m_Array;

        
int m_Head;
        
int m_Tail()return ( m_Head - m_Count + 1 ) % m_Capacity; }
    }
;
}

#endif

当然没有STL里面的强大了,不过学习用途也不错。主要是为了学习C++。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值