在游戏服务器中,很常见的做法就是把消息放进循环队列中,使用循环队列来管理消息。一个简单的循环队列实现如下:
template <typename T, int QueueSize = 10> //非类型模板形参
class MyCircleQueue
{
public:
MyCircleQueue()
{
front = rear = 0;
}
void EnQueue(T x);
void DeQueue()
{
front = (front + 1) % QueueSize;
}
T GetFront()
{
return data[front % QueueSize];
}
void Reset()
{
front = rear = 0;
}
int GetLen()
{
return (rear - front + QueueSize) % QueueSize;
}
bool Empty()
{
return front == rear ? true : false;
}
private:
int front;//队头
int rear;//队尾
T data[QueueSize];
};
//在类里面实现会简洁些
template <typename T, int QueueSize> //类外部实现不需要写出默认参数
void MyCircleQueue<T, QueueSize>::EnQueue(T x)
{
rear = (rear + 1) % QueueSize;
data[rear] = x;
}
int main()
{
MyCircleQueue<int, 5> qu;
qu.EnQueue(1);
qu.EnQueue(2);
qu.EnQueue(3);
cout << qu.GetFront() << " " << qu.GetLen() << endl;
qu.DeQueue();
cout << qu.GetFront() << " " << qu.GetLen() << endl;
qu.EnQueue(4);
cout << qu.GetFront() << " " << qu.GetLen() << endl;
return 0;
}