Liste



  • Hey,
    Da das ja gerade öffter das tehma war habe ich mir nochmals versucht eine Liste zu schreiben. Nur leider klappt das nicht so ganz.

    
    template<typename T>
    class List
    {
        public:
        T *data;
        List* next;
    
        List add_begin( List n_l, T data)
        {
                   // List<T>*S = new List((int)sizeof(List));
                        List S;
                        S.data= &data;
                        S.next= &n_l;
                    return S;
                   // delete S;
    
    
        }
    
    
    
    };
    

    data wird kein wert zugewiesen.
    Über etwas hilfe würd ich mich echt freuen.



  • @Abe sagte in Liste:

    data wird kein wert zugewiesen.

    doch, da:

    @Abe sagte in Liste:

    S.data= &data;
    


  • @Abe

    data wird kein wert zugewiesen.

    Welchem data?

    Warum hat die Funktion eine Liste als Parameter? Warum als Kopie?

    Warum gibt die Funktion eine Liste zurück?

    Was hat das alles mit CLI/.NET zu tun?



  • @Swordfish sagte in Liste:

    @Abe sagte in Liste:

    data wird kein wert zugewiesen.

    doch, da:

    @Abe sagte in Liste:

    S.data= &data;
    

    Also ja und nein

    in der main mach ich dann halt

    List<int> E;
    E.add_begin(E,10);
    E.add_begin(E,100);
    E.add_begin(E,1000);
    std::cout<< E.data[1];
    

    jezt sollte 100 rauskomm Passiert nur nicht da wurde noch nix zugewiesen.

    @manni66 sagte in Liste:

    @Abe

    data wird kein wert zugewiesen.

    Welchem data?

    Warum hat die Funktion eine Liste als Parameter? Warum als Kopie?

    Warum gibt die Funktion eine Liste zurück?

    Was hat das alles mit CLI/.NET zu tun?

    (1)T *data;

    (2)Ich habe es nach vorbild eines c tutorials geschrieben.

    (3)Jezt hab ich mir nochmal die standart list angesehen versuchs gleich nochmal anders .
    (4)Ich bin mir nicht ganz sicher denoch denk ich das S dann E zugewiesen wird.
    (5)nix



  • @Abe sagte in Liste:

    Ich habe es nach vorbild eines c tutorials geschrieben.

    Wegwerfen.

    Was ist &data in add_begin()?



  • S sollte eigentlich ein Pointer sein. Der dann auf data und dann next von n_l übernimmt und das dann zurückgibt.
    Wollte mich gerade mit dynamischenstrukturen und speicherverwaltung und so ein zeug auseinandersetzen



  • https://www.amazon.de/s?k=c%2B%2B&i=stripbooks&__mk_de_DE=ÅMÅŽÕÑ&ref=nb_sb_noss_2

    @Abe sagte in Liste:

    S sollte eigentlich ein Pointer sein.

    int add_begin(List n_l, T data)
    {
        int S;
        // ...
        return S;
    }
    

    ist S ein Pointer?



  • Ja ich hatte mir auch schon das C++ für Dummis geholt leider wird das nicht da durchgenommen glaub ich ich lese es einfach nochmal



  • @Abe sagte in Liste:

    C++ für Dummis

    Wahrscheinlich auch besser wegwerfen.

    Der Witz an "Memberfunktionen" (Funktionen die Teil einer class oder struct sind) ist, daß sie auf den Daten der Instanz arbeiten können, für die sie aufgerufen werden:

    #include <iostream>
    
    struct foo
    {
        int value = 42;
    
        void print() {
            std::cout << value;
        }
    
        void set(int v) { value = v; }
    }
    
    int main()
    {
        foo f;
        f.print();  // 42
        std::cout.put('\n');
    
        f.set(36);
        f.print();  // 36
        std::cout.put('\n');
    }


  • @Swordfish sagte in Liste:

    Wahrscheinlich auch besser wegwerfen.

    Du machst mir ja richtig mut



  • @Abe sagte in Liste:

    Du machst mir ja richtig mut

    Musst ja nicht. Türstopper, Briefbeschwerer, ...

    Spaßeshalber:

    template<typename T>
    struct Node
    {
        T data;
        Node *next = nullptr;
        Node *prev = nullptr;
    
        Node(T value) : data{ value } {}
    };
    
    template<typename T>
    class List
    {
        Node<T> *first = nullptr;
        Node<T> *last = nullptr;
    
    public:
        void push_front(T value)
        {
            Node<T> *new_node = new Node<T>{ value };
    
            if (!first) {
                first = last = new_node;
                return;
            }
    
            new_node->next = first;
            first = new_node;
        }
    };
    


  • Ja gut danke jezt hab ich wider was zum denken. 😃


Log in to reply