搜尋

首頁  >  問答  >  主體

c++数据结构的实现类

我想用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;
    }
怪我咯怪我咯2805 天前645

全部回覆(3)我來回復

  • PHPz

    PHPz2017-04-17 13:37:43

    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
  • 巴扎黑

    巴扎黑2017-04-17 13:37:43

    沒問題,只要你能正確處理異常和記得釋放記憶體
    為什麼不用std::queue呢…

    回覆
    0
  • 迷茫

    迷茫2017-04-17 13:37:43

    我的想法是,既然是用C++去解決這個問題,那就用C++的封裝方式去解決。在C++中,一切皆對象,那麼就定義一個類別queue,具體的實作可以參考STL的queue實作。

    如果是想用C的方式去解決,那就用鍊錶方式
    struct _Node
    {

    char* data;
    struct _Node* priv;
    struct _Node* next;

    };

    data在程式執行時,建立有malloc完成,刪除有free完成。
    我的理解是C和C++不是一樣的語言。

    回覆
    0
  • 取消回覆