C++でリストを作成するにはどうすればよいですか?リンクリストを作成するのに必要です。 どうすればいいのでしょうか? 良いチュートリアルや見本はありますか?
C ++にはすでにリンクされたリストクラスがあり、その方法を学びたいので、自分で実装したいと思っていると思います。
まず、https://stackoverflow.com/questions/392397/arrays-whats-the-pointを読んでください。これには、基本的なデータ構造の優れた回答が含まれています。 次に、C ++でそれらをモデル化する方法について考えます。
struct Node {
int data;
Node * next;
};
基本的に、リストを実装するために必要なのはこれだけです。! (非常に単純なもの)。 それでも抽象化はありません。手ごとにアイテムをリンクする必要があります。
Node a={1}, b={20, &a}, c={35, &b} d={42, &c};
これで、ノードのリンクリストがあり、すべてスタックに割り当てられます。
d -> c -> b -> a
42 35 20 1
次のステップは、開始ノードを指し、必要に応じてノードを追加してリストの先頭を追跡できるラッパークラス「リスト」を作成することです(以下は非常に簡略化されています)。
class List {
struct Node {
int data;
Node * next;
};
Node * head;
public:
List() {
head = NULL;
}
~List() {
while(head != NULL) {
Node * n = head->next;
delete head;
head = n;
}
}
void add(int value) {
Node * n = new Node;
n->data = value;
n->next = head;
head = n;
}
// ...
};
次のステップは、リストをテンプレートにして、他の値(整数だけでなく)を詰め込むことができるようにすることです。
スマートポインタに精通している場合は、スマートポインターで使用されている生のポインターを交換できます。 多くの場合、人々は初心者にスマートポインターを推奨しています。 しかし、私の意見では、まずスマートポインターが必要な理由を理解してから、それらを使用する必要があります。 ただし、そのためには、まず生のポインタを理解する必要があります。 それ以外の場合は、なぜ必要なのかわからないまま、魔法のツールを使用します。
std :: list
を使用する場合は、typeパラメーターを渡す必要があります。
list<int> intList;
list<int>* intListPtr = new list<int>;
リストがどのように機能するかを知りたい場合は、C / C ++チュートリアルをグーグルして、その主題を理解することをお勧めします。 次のステップは、リストクラスを作成するのに十分なC ++を学習し、最後にリストテンプレートクラスを作成することです。
さらに質問がある場合は、こちらに質問してください。
なぜ車輪を再発明するのか。STLリストコンテナを使えばいいだけです。
#include <list>
// in some function, you now do...
std::list<int> mylist; // integer list
C ++テンプレートを使用してリストを作成します。
つまり
template <class T> struct Node
{
T data;
Node * next;
};
template <class T> class List
{
Node<T> *head,*tail;
public:
void push(T const&); // push element
void pop(); // pop element
bool empty() // return true if empty.
};
次に、次のようなコードを記述できます。
List<MyClass>;
タイプTは実行時に動的ではなく、コンパイル時間のみを対象としています。
完全な例聞くをクリック。
C ++テンプレートのチュートリアルの場合ヒアリングをクリック。