Frage zu Stack



  • oke hab am schluss noch cin eingefügt und da sieht man dass die zahl davor gespeichert wird.

    aber dafür gibts ja auch variablen die gehen doch auch dafür



  • oke habs so probiert wies du gesagt hat und es stimmt
    ^^ hab buchstaben eingegeben ^^

    aber dafür gibts ja variablen und arrays



  • Sind Stacks etwa keine Variablen?



  • ne ich meinte "normale" variabeln wie int name; is doch des gleiche nur weniger schreiben



  • Du kannst in einen Stack mehr als einen Integer stapeln.

    Ein Stack (Stapel, manchmal auch "Keller" genannt) ist eine sog. LIFO-Datenstruktur (LIFO = last in, first out). Du kannst mehrere Werte reinstopfen und sie in umgekehrter Reihenfolge wieder auslesen.

    Praktisches Beispiel: Undo/Redo.

    #include <iostream>
    #include <sstream>
    #include <stack>
    #include <string>
    
    int main() {
      std::string line;
      std::stack<double> undo_stack;
      std::stack<double> redo_stack;
      double sum = 0.0;
    
      while(true) {
        std::cout << "Zahl, undo, redo, exit? " << std::flush;
        std::getline(std::cin, line);
    
        if(line == "exit") {
          break;
        } else if(line == "undo" && !undo_stack.empty()) {
          redo_stack.push(sum);
          sum = undo_stack.top();
          undo_stack.pop();
        } else if(line == "redo" && !redo_stack.empty()) {
          undo_stack.push(sum);
          sum = redo_stack.top();
          redo_stack.pop();
        } else {
          std::istringstream parser(line);
          double x;
    
          if(parser >> x) {
            while(!redo_stack.empty()) {
              redo_stack.pop();
            }
    
            undo_stack.push(sum);
            sum += x;
          }
        }
    
        std::cout << "Summe: " << sum << std::endl;
      }
    }
    

    Üblicherweise besteht der Zustand in einer solchen Historie natürlich aus mehr als nur einer Zahl.

    Ansonsten brauchen viele Algorithmen in irgendeiner Form einen Stack. Spontan fällt mir der Shunting-Yard-Algorithmus zum Lösen von Infix-Ausdrücken ein, aber im Grunde trifft das auf alles zu, was eine Stapelmaschine braucht.



  • achso

    thx kapiert wozu man das braucht.

    weis einer noch zufällig ne seite wos genau erklärt wird?



  • Du hast doch das Buch "Die C++ Programmiersprache" von Bjarne Stroustrup, wie du geschrieben hast.
    Eine Referenz ist zwar auch hier zu finden (http://www.cplusplus.com/reference/stl/stack/, in deinem Buch ist doch ab Seite 505 (4. Auflage) alles gut beschrieben.

    Edit: 4., nicht 5. Auflage

    Edit 2: Ich sehe gerade, das Beispiel des Stacks, welches du beschrieben hast, ist wirklich in dem Buch zu finden, allerdings auf Seite 29 im Kapitel "Eine Rundreise durch C++".
    Stroustrup wollte hier aber auch nur generelle Dinge wie den Gebrauch von namespaces zeigen.

    Edit 3 (einer muss noch sein): Nimm dir den ersten Ratschlag Stroustrups zu Herzen (für alle, die das Buch nicht kennen, er lautet "Nur keine Panik, mit der Zeit wird alles klarer.")
    LG Hendrik



  • oh thx^^^^

    hab zwar 3. auflage aber da wirds auch beschrieben.



  • @bammes: ich habe das unbestimmte Gefühl, dass Du völlig falsche Bücher liest. Du solltest einfacher und grundlegender anfangen.

    Wie ein Stack (Stapel) funktioniert, dürfte dir inzwischen klar sein:
    http://upload.wikimedia.org/wikipedia/commons/2/29/Data_stack.svg
    http://www.cosc.canterbury.ac.nz/mukundan/dsal/StackAppl.html (geht nix über praktisches Visualisieren)

    "push" legt Daten oben drauf, "pop" holt die zuletzt darauf gelegten Daten wieder ab. Das nennt man LIFO = Last in first out.

    Aber wozu man einen Stack benötigt, ist dir offenbar noch nicht klar.

    Geh mal folgendermaßen vor:
    Wozu benötigt man in Programmen einen Stack und einen Heap (malloc/free bzw. new/delete)?
    Was ist ebp und esp? http://www.henkessoft.de/OS_Dev/Bilder/Register386.png
    Was ist ein buffer overflow? http://de.wikipedia.org/wiki/Pufferüberlauf



  • Was ist ebp und esp? http://www.henkessoft.de/OS_Dev/Bilder/Register386.png
    Was ist ein buffer overflow? http://de.wikipedia.org/wiki/Pufferüberlauf

    Das wird im sicherlich helfen... 🙄

    Das Problem sind nicht die Bücher, sondern dass er sie nicht gründlich genug liest oder/und sich die Zeit nimmt sie zu verstehen. "Die C++ Programmiersprache" ist ein sehr gutes Buch, wo alles wirklich genau beschrieben wird - vielleicht zu genau für einen Anfänger, weswegen ich eher den "C++ Primer" oder "Der C++ Programmierer" empfehlen würde.



  • thx werde mir deine fragen durchlesen

    problem: ganz am anfang fangen die mit stacks an obwohl es erst bei der hälfte richtig erklärt wird


Anmelden zum Antworten