我想用c++寫一個隊列類,看到網上有結構體是這么寫的typedef struct Queue_tag{ int data[MAXSIZE];
int front,rear;
}QUEUE;但是實例化類時好像只能通過改寫MAXSIZE來更改隊列初始化大小我想在構造函數里輸入參數來確定大小,于是我寫了下面的結構體,然后在函數里new了一個隨參數改變長度的數組,并讓*arr指向這個數組,請問這么做有沒有問題,我看好多代碼數組在結構體里都直接確定了大小,那有沒有什么辦法可以不通過更改宏定義而是通過構造函數來初始化大小呢struct queue
{
T *arr;
T *head;
T *tail;}*q;
void initQueue(int lenght)
{
q = new queue;
T *p = new T[lenght];
q->arr = p;
q->head = p;
q->tail = p;
}
2 回答

揚帆大魚
TA貢獻1799條經驗 獲得超9個贊
我的想法是,既然是用C++去解決這個問題,那么就用C++的封裝方式去解決。在C++中,一切皆對象,那么就定義一個類queue,具體的實現可以參考STL的queue實現。
如果是想用C的方式去解決,那么就用鏈表方式
struct _Node
{
char* data; struct _Node* priv; struct _Node* next;
};
data在程序執行時,創建有malloc完成,刪除有free完成。
我的理解是C和C++不是一樣的語言。

德瑪西亞99
TA貢獻1770條經驗 獲得超3個贊
template<T>
class QUEUE
{
private:
T* data;
int front;
int rear;
int size;
public:
QUEUE() {}
QUEUE(int sz)
{
data = new T(sizeof(T) * sz);
size = sz;
/*your code below*/
}
~QUEUE()
{
delete data;
data = nullptr;
}
};
題主如果是練手,可以像上面這樣,自己重載一個構造函數就行了。如果是為了項目要用,直接用std::queue。另外一般的FIFO隊列,用鏈表實現更方便,而且易于增刪元素。這種用數組實現的一般用于循環隊列。
添加回答
舉報
0/150
提交
取消