Stack Template o.k.?
-
und warum schlägst du dann nicht gleich std::stack vor?
-
Die vorgeschlagene Klasse hat aber andere Semantiken als std::stack, und ich bin einfach mal davon ausgegangen, dass die irgendeinen Grund haben.
-
@...:
push und pop sollten wenigstens im Debug-Build mit einem assert gegen überlauf gesichert werden. Eine korrekte Implementation sollte natürlich eine exception werfen.push sollte evtl. als push(T const &) deklariert werden. spart eine Kopie.
Ich glaube, ich schreibe bald mal ne Internetseite mit smart-ptr-Propaganda und poste dann nur noch Links..
Mach das!
Trotzdem sollte man natürlich einen ordentlichen CopyCTor/Assignment Operator haben, und wenn's nur ist, um ruhig zu schlafen...
-
und ein T stack::peek() wäre auch nicht schlecht
-
danke für die Hinweise
was macht peek? push und pop reichen doch.
-
wenn du einen prädiktiven Parser baust, musst du das obere Element des Stacks öfter inspizieren als entfernen, von daher würde sich eine top-Methode anbieten. Und völlig unzusammenhängend damit zeigt Herb Sutter in Exceptional C++, dass man eine pop-Methode, die gleichzeitig das gepoppte Element zurückgibt, nicht exceptionsicher machen kann. Achja: Der kanonische Name dafür ist top, nicht peek.
-
Und völlig unzusammenhängend damit zeigt Herb Sutter in Exceptional C++, dass man eine pop-Methode, die gleichzeitig das gepoppte Element zurückgibt, nicht exceptionsicher machen kann
Ich bin mir nicht sicher - aber wenn ich nichts übersehen habe, "zieht" das argument hier nicht, da der Stack keine allokationen pro Operation durchführt.
Der einzige, der bei dieser pop()-implementation eine exception werfen kann, ist der Copy-CTor von T. Und in dem fall ist zwar der stack-pointer schon dekrementiert, aber der Stack noch in einem ganz brauchbaren Zustand.
-
[lösch mich ich bin eine doppelnachricht]
-
Jo, aber der Wert liegt nicht mehr auf dem Stack und wurde auch nicht zurückgeliefert, er ist also verloren.
Also zumindest nicht die starke Garantie.
-
Ups stimmt, die Basisgarantie scheint gegeben zu sein. Ich hab das Buch leider nicht, nur mal ein paar interessante Stellen angelesen.