Wie funktioniert die Adapterklasse Stack?



  • Hallo,

    ich will/muss die Adapterklasse Stack in einem Programm verwenden um dort Objekte abzulegen, die ich selbst angelegt habe. Ich weiß, das ich mit der Methode

    push();
    

    etwas im Stack ablegt (auf den "Papierstapel") und dann mit der Methode

    pop();
    

    etwas vom Stack nimmt (von oben vom "Papierstapel").
    Ich weiß jetzt nicht ob ich die STL-Klasse stack nutzen kann/muss 😮 (und wenn weiß ich nicht wirklich wie) oder ob ich selbst eine eigene Stack-Klasse schreiben soll?
    Praxisnahe Beispiele helfen mir meistens am Besten 😃

    ... der Stephan



  • std::vector<ELEMENT> vStack;
    
    vStack.push(ELEMENT);
    
    vStack.pop();
    


  • BorisDieKlinge schrieb:

    std::vector<ELEMENT> vStack;
    
    vStack.push(ELEMENT);
    
    vStack.pop();
    

    Wenn deine STL-Implementierung von vector die Funktionen pop() und push() haben
    sollte, dann solltst du schleunigst auf eine standardkonforme Implementierung wechseln. 😕 😃 😕

    Beispiel:

    #include <iostream>
       #include <stack>
       using namespace std;
    
       int main()
       {
    
           stack<int> st;
    
           // push three elements into the stack
           st.push(l);
           st.push(2);
           st.push(3);
    
           // pop and print two elements from the stack
           cout << st.top() << ' ';
           st.pop() ;
           cout << st.top() << ' ';
           st.pop() ;
    
           // modify top element
           st.top() = 77;
    
           // push two new elements
           st.push(4);
           st.push(5);
    
           // pop one element without processing it
           st.pop() ;
    
           // pop and print remaining elements
           while (!st.empty()) {
               cout << st.top() << ' ';
               st.pop() ;
           }
           cout << endl;
       }
    

    @Stephan_lernt_C++:
    Was bringt dich auf die Idee ne eigene Stack-Klasse schreiben zu wollen. 😕



  • @stephan: Die STL hat schon eine Klasse stack<>, die du womöglich benutzen kannst (es sei denn, dein Lehrer verbietet es dir). Und die bietet dir auch die Methoden push(wert) (Wert auf den Stack packen), top() (lesen des obersten Stack-Elements) und pop() (oberstes Stack-Element entnehmen und wegschmeißen).

    @Boris: Wenn du unbedingt einen nackten vector<> verwenden willst, heißen die entsprechenden Methoden push_back() und pop_back() 😉 (stack ist ein Adapter um einen Container (per default deque, aber vector ist auch verwendbar) und führt push/pop auf dessen push_Back/pop_back zurück)



  • ups sorry..... :p



  • Ich will dabei keine STL Objekte sonder selbst geschriebene Objekte drin abspeichern, ist dies auch möglich?

    ... der Stephan



  • ...ja ist auch möglich.



  • Was wären denn für dich STL-Objekte?^^ Vector in Vector ist ja nur bedingt sinnvoll *g*

    class meine_krasse_klasse;
    ...
    std::stack<meine_krasse_klasse> stack;
    ...
    


  • Stephan_lernt_C++ schrieb:

    Ich will dabei keine STL Objekte sonder selbst geschriebene Objekte drin abspeichern, ist dies auch möglich?

    Klar ist das möglich - dank der Magie der Templates. In einen stack<> kannst du alles reinpacken, was kopierbar ist (und solange du nicht den Copy-Ctor und operator= entschärft hast, sind nahezu alle üblichen Klassen kopierbar).


Anmelden zum Antworten