如何在Qt中创建unsigned char数组的队列?

时间:2012-03-13 06:14:03

标签: qt qt4 queue

我是Queue(FIFO)和Qt的新手。我想在Qt中创建一个unsigned char数组的队列。怎么做?请帮忙

unsigned char buffer[1024];

1 个答案:

答案 0 :(得分:3)

如果您想使用Qt API,那么您可以使用QQueue类 -

 QQueue<unsigned char> queue;
 queue.enqueue(65);
 queue.enqueue(66);
 queue.enqueue(67);
 while (!queue.isEmpty())
     cout << queue.dequeue() << endl;

如果您想自己构建队列,那么我猜你可以像这样声明一个Queue类 -

class Queue
{
private:
    enum{SIZE=1024, EMPTY=0};
    unsigned char buffer[SIZE];
    int readHead, writeHead;

public:
    Queue()
    {
        readHead = writeHead = EMPTY;
    }

    void push(unsigned char data);
    unsigned char pop();
    unsigned char peek();
    bool isEmpty();
};

void Queue::push(unsigned char data)
{
    if((readHead - writeHead) >= SIZE)
    {
        // You should handle Queue overflow the way you want here.
        return;
    }

    buffer[writeHead++ % SIZE] = data;
}

unsigned char Queue::pop()
{
    unsigned char item = peek();
    readHead++;
    return item;
}

unsigned char Queue::peek()
{
    if(isEmpty())
    {
        // You should handle Queue underflow the way you want here.
        return;
    }

    return buffer[readHead % SIZE];
}

bool Queue::isEmpty()
{
    return (readHead == writeHead);
}    

如果要维护unsigned char数组的队列,则必须维护unsigned char指针的队列 -

QQueue<unsigned char *> queue;
unsigned char *array1 = new unsigned char[10];    // array of 10 items
array1[0] = 65;
array1[1] = 66;
queue.enqueue(array1);
unsigned char *array2 = new unsigned char[20];    // an array of 20 items
queue.enqueue(array2);

unsigned char *arr = queue.dequeue();
qDebug() << arr[0] << ", " << arr[1];

注意 :完成此队列后,您应该完成内存清理工作。恕我直言,你最好避免这种类型的设计。