2012-03-13 68 views
1

我是Queue(FIFO)和Qt中的新成員。我想在Qt中創建一個無符號字符數組隊列。怎麼做?請幫助如何在Qt中創建一個無符號字符數組隊列?

unsigned char buffer[1024]; 
+0

你想自己構建隊列,還是想使用Qt API進行排隊? – 2012-03-13 06:46:41

+0

我喜歡使用Qt API – indira 2012-03-13 07:21:01

回答

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陣列的隊列,那麼你將不得不保持隊列個指針 -

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]; 

:你這個隊列結束,你應該照顧的內存清理。恕我直言,你最好避免這種類型的設計。

+0

但我的要求是Queue中的每個數據應該是一個unsigned char數組。 – indira 2012-03-13 07:15:23

+0

然後你應該使用一個無符號字符指針隊列.....請參閱編輯。 – 2012-03-13 08:18:46

+0

非常感謝你的支持 – indira 2012-03-13 09:30:56

相關問題