环形队列在之前的篇幅中已经介绍了,这里介绍使用一种万能的模板适合任意场景
#ifndef _CIRCLESESSION_H_
#define _CIRCLESESSION_H_
#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
template <typename T>
//定义最大的字符长度
#define MAXLEN 1024*1024
class QueueSender{
public:
QueueSender() : mFront(0), mRear(0), mSize(MAXLEN){
mData = new T[mSize];
}
~ QueueSender(){
delete []mData;
}
bool isEmpty() const{ //判断是否为空
if(mFront == mRear){
return true;
}
else{
return false;
}
}
bool isFull(){ //判断队列是否满了
if(mFront==(mRear + 1) % mSize){
return true;
}
else{
return false;
}
}
int pushData(T element, unsigned long size) {
if(!isFull()){
mSize = size;
mData[mRear] = element;
mRear++;
mRear=(mRear + 1) % mSize;
return 0;
}else
return -1;
}
void cleardata(){
mFront = 0;
mRear = 0;
mSize = MAXLEN;
}
void popData(T &element) {
if(!isEmpty()){
element = mData[mFront];
mFront++;
mFront = (mFront + 1) % mSize;
return;
}
}
private:
unsigned long mSize;
int mFront;
int mRear;
T* mData;
};
#endif