テンプレートおよびテンプレートキュー

2267 ワード

c++というものはやはり多く使わなければならない.そうしないと、しばらくするとまた忘れてしまう.c++のテンプレートはプログラミング効率を高めるために使われている.特にデータ構造の面では、スタック、キューなど、要素の操作は固定されているが、要素のタイプは多様で、テンプレートの存在は各タイプが対応するコードを書くことを根絶している.
  • テンプレートクラス
  • を定義する
    template 
    class Queue
    {
    ....
    }
    

    一般的にテンプレートクラスを定義する場合、通常の定義の前にtemplate を付けるだけです.ここでTは後で使うタイプです.int、floatなどです.
  • キュー
  • キューはイベントメッセージで使用されることが多く、先進的なデータ構造であり、実際には技術的な含有量はありません~~一般的なキューの実装は、2つのフィールドを含む構造体を定義しています.
        template 
        struct Node
        {
            Node * next;
            N ele;
        };
    
  • next:次のノード
  • ele:格納されている要素はここで見ることができますが、Nodeという構造体もテンプレートで定義されています.QueueがTを定義していることを発見しましたか.ここでNを定義しましたか.主に両者を区別するために、ここまで言うとテンプレートクラスをどのように使うかを紹介します.そのうちintはTです.その後QueueクラスのすべてのTはintの意味です.Queueのコード
  • を見てみましょう.
    template 
    class Queue
    {
    private:
        template 
        struct Node
        {
            Node * next;
            N ele;
        };
        int _len;
        Node * head;
        Node * tail;
    public:
        
        Queue():_len(0)
        {
            head = tail = new Node();
            head->next = NULL;
        }
    
        ~Queue()
        {
            while(head->next)
            {
                Node * node = head;
                head = head->next;
                delete node;
            }
            delete head;
        }
    
        void push(T ele)
        {
            if(_len == 0 )
            {
                head->ele = ele;
                _len++;
                return;
            }
            _len++;
            Node * node = new Node();
            node->ele = ele;
            node->next = NULL;
            tail->next = node;
            tail = node;
        }
    
        T pop()
        {
            _len--;
            if(_len < 0 )
                return NULL;
            Node * node = head;
            head = head->next;
            node->next = NULL;
            return node->ele;
        }
    
        int getLength()
        {
            return _len;
        }
    
        bool isNull()
        {
            return 0 == _len;
        }
    };
    

    head,tailを定義する際には,ノードをTで初期化したが,以前はintで初期化したTを用いていたので,Nもintになった.キューの操作は簡単で、キューに入ることができず、キューを出ることができません.そのうちpopは空にならないように注意する必要があります.その中で判断しなければなりません.もう一つ注意しなければならないのは、すべてのノードがnewで申請されているので、分析するときにすべてのメモリを解放することです.