テンプレートおよびテンプレートキュー
2267 ワード
c++というものはやはり多く使わなければならない.そうしないと、しばらくするとまた忘れてしまう.c++のテンプレートはプログラミング効率を高めるために使われている.特にデータ構造の面では、スタック、キューなど、要素の操作は固定されているが、要素のタイプは多様で、テンプレートの存在は各タイプが対応するコードを書くことを根絶している.テンプレートクラス を定義する
一般的にテンプレートクラスを定義する場合、通常の定義の前にキュー キューはイベントメッセージで使用されることが多く、先進的なデータ構造であり、実際には技術的な含有量はありません~~一般的なキューの実装は、2つのフィールドを含む構造体を定義しています. next:次のノード へ ele:格納されている要素はここで見ることができますが、Nodeという構造体もテンプレートで定義されています.QueueがTを定義していることを発見しましたか.ここでNを定義しましたか.主に両者を区別するために、ここまで言うとテンプレートクラスをどのように使うかを紹介します.そのうちintはTです.その後QueueクラスのすべてのTはintの意味です.Queueのコード を見てみましょう.
head,tailを定義する際には,ノードをTで初期化したが,以前はintで初期化したTを用いていたので,Nもintになった.キューの操作は簡単で、キューに入ることができず、キューを出ることができません.そのうちpopは空にならないように注意する必要があります.その中で判断しなければなりません.もう一つ注意しなければならないのは、すべてのノードがnewで申請されているので、分析するときにすべてのメモリを解放することです.
template
class Queue
{
....
}
一般的にテンプレートクラスを定義する場合、通常の定義の前に
template
を付けるだけです.ここでTは後で使うタイプです.int、floatなどです. template
struct Node
{
Node * next;
N ele;
};
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で申請されているので、分析するときにすべてのメモリを解放することです.