-1

今回は問題はありませんが、Node(int,nextNode) のようなノードを持つ単純な List の実装を探しているだけです。過去に何度もやりましたが、私のC++は少し錆びました。私と共有していただけますか?私は自分のアーカイブを github で探していましたが、Antyhing が見つかりませんでした。

編集:

*私は私のものをやろうと決心しましたが、削除を使用した後でも cout<getWrt()<* を取得できる理由がわかりません

#include <cstdio>
#include <cmath>
#include<iostream>

using namespace std;

class Node{

public:
    Node(Node* next, int wrt){
        this->next = next;
        this->wrt = wrt;

    }

    Node(const Node& obiekt){
        this->wrt = obiekt.wrt;
        this->next = obiekt.next;
    }
    ~Node(){}

    void show(){
        cout<<this->wrt<<endl;
    }

    int getWrt(){
        return this->wrt;
    }

    Node* getNext(){
        return this->next;
    }

 private:
    Node* next;
    int wrt;

};


int main()
{
Node* n  = new Node(NULL, 2);
n->show();
Node* n2 = new Node(*n);
n2->show();
delete n;
n->show();
n2->show();
return 0;
}
4

2 に答える 2

4

基本的なリストの実装は、単方向リスト (または関数型言語では cons-list) と呼ばれることがよくあります。

関数の定義は、リストの構造に直接切り込みます。

List := Empty | Cons T List

もちろん、これは C や C++ では実際には機能しないため、構造を 2 つに分割する必要があります。

  • リストはノードのチェーンとして実装されます
  • List クラスはこの実装の詳細を隠します

簡単なコードを次に示します。

template <typename T>
struct Node {
    Node(T t): element(t) {}

    T element;
    std::unique_ptr<Node> next;
};

template <typename T>
class List {
    typedef Node<T> N;
public:
    List() {}

    bool empty() const { return head == nullptr; }

    T& front() { assert(!this->empty()); return head->elem; }
    T const& front() const { { assert(!this->empty()); return head->elem; }

    void pop() { assert(!this->empty()); swap(head, head->next); }

    void push(T t) {
        std::unique_ptr<N> n{ new Node {t} };

        n->next = std::move(head);

        head = std::move(n);
     }

private:
    std::unique_ptr<N> head;
};

ご覧のとおり、このリストはスタックとして実装されているだけで、反復などはありません...それでも、これは良い始まりです :)

于 2012-05-26T17:23:53.993 に答える
2

エクスが言ったように、あなたの最善の策はどちらかを選ぶことです...

  • std::list は二重にリンクされたリストです。つまり、逆方向のトラバーサル速度と引き換えにメモリ使用量または
  • あまり広く実装されていない std::slist (C++11 では forward_list と呼ばれる) は、単一リンクであり、一方向にしかトラバースできません。

もちろん、cplusplus.com には両方の参考情報があります。

STL の一部として、両方のリストの実装が広範にテスト、調整、およびデバッグされています。どちらも標準の STL アルゴリズムをサポートしています。それらを使用しない理由はほとんどありません。

于 2012-05-26T17:12:45.900 に答える