Stack



  • Hi,
    ich wollte gern ein Stack mit hilfe von der List klasse basteln

    Ich bin mir nur nicht ganz sicher wie ich starten sollte bzw wie der Quelltext dazu aufgebaut ist, ich wollte im Header eine Klasse "Stack" erstellen die von List erbt und deren Methoden nutzt.

    Kann mir da jmd etwas Hilfestellung geben?
    Vielen Dank 🙂



  • Ich würde nicht von std::list erben sondern eine besitzen, wenn ich der Stack wäre.


  • Mod

    Du weißt, dass es einen std::stack gibt?

    Als unterliegenden Container für einen Stack würde ich auf gar keinen Fall list nehmen. Wie kommst du denn darauf? vector ist doch perfekt. Eventuell noch deque, aber das ist schon suboptimal, wenn nicht gewisse Annahmen über das Wachstum des Stacks gelten. Wo helfen dir denn die Stärken der list (also Zusammenfügen und Trennen) beim Stack?



  • Ich will mit List nur die werte speichern, weiter nichts 😨



  • list ist doch schon ein Stack mit ein paar zusätzlichen Methoden, die man ja nicht benutzen muss. Genauso vector .



  • Ich will nur einen Stack mit meinen methoden implementieren der gebrauch von der list macht per vererbung und ich weiß nun leider nicht wie ich das ganze richtig implementiere



  • C++ ist kein Java. Ich versteh nicht genau was du vor hast, aber es klingt falsch.



  • Ent schrieb:

    Ich will nur einen Stack mit meinen methoden implementieren der gebrauch von der list macht per vererbung und ich weiß nun leider nicht wie ich das ganze richtig implementiere

    was genau willst du denn machen? wenn du das verrätst, hast du gute karten, dass dir jemand sagt, wie man das richtig machen würde...



  • Ich will lediglich funktionen wie pop implementieren nur mithilfe der #include<list> diese funktionen sind ja in der list bereits anders vorhanden und ich möchte nur wissen wie ich diese funktionen aus der list verwenden kann für eine stack implementierung



  • Hier eine kleine Starthilfe - ein rohes Gerüst eines Stacks.
    Der Stack hier kann "nur" ints aufnehmen - das ganze mit Templates zu machen kannst Du in einem zweiten Schritt.

    Ich hoffe das ganze ist bloss eine Übung. 🕶

    Noch als Tipp: Leite nicht von Standard Containern ab - sie sind nicht dafür gemacht.

    #pragma once
    
    #include <vector>
    
    class Stack
    {
    public:
       void push(int element)
       {
          // hier das element den elements_ hinzufügen
       }
    
       int pop()
       {
          // hier ein element von elements_ entfernen und
          // zurückgeben (natürlich vom richtigen Ende..)
       }
    
    private:
       std::vector<int> elements_;
    };
    


  • Habe ich das falsch in Erinnerung oder eigenen sich die meisten Sachen aus der C++ stand.lib wirklich nicht als basisklasse ( wegen fehlendem, virtuellen dctor und fehlendem wissen über diese tatsache ) ?


  • Mod

    Wenn du von etwas erben möchtest, dann möchtest du ja in der Regel dessen virtual oder protected Member benutzen. Die STL-Container haben keine solchen Member. Alles was du tun kannst, ist also die Funktionalität des public-Interfaces zu erweitern. Dazu sind aber eher freie Funktionen da.


Anmelden zum Antworten