Frage zu Stack
-
achso also eine sammlung von werten ^^
gut das war die frage
und ich hab kp was des fürn code ist
denke des verlangt irgendeine eingabe und füht s in nen stack hinzu
stimmt das?
-
Probier's doch mal aus.
-
hab ich ja schon aber es gibt nichts aus^^ sondern schließt gleich nach eingabe
-
bammes schrieb:
hab ich ja schon aber es gibt nichts aus^^ sondern schließt gleich nach eingabe
Schade. Er sollte so lange Zahlen einlesen, bis man eine 0 eingibt, und dann die Zahlen außer der 0 wieder ausgeben, und zwar in umgekehrter Reihenfolge.
-
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überlaufDas 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