2013-11-21 26 views
0

我有一個關於堆棧的簡單問題,我一直在想。堆棧基礎知識

如果給變量一個值,然後將它們壓入堆棧,一旦它們被放入堆棧中,它們是否仍然包含相同的值,或者值將變爲「無效」,並且您必須在疊加麼?

我理解它的方式,一旦從堆棧中彈出一個變量,它將返回到變量被推入之前的值,是否正確?但是,推動它時,變量是否會保留其價值?

在此先感謝!

+0

這是['std :: stack '](http://www.cplusplus.com/reference/stack/stack/)我們正在談論,對吧? – dasblinkenlight

+0

在堆棧上推動變量與將橙色推入包中不同:應用了語義是複製而不是移動的語義。這就像把你的橘子放在一個袋子裏,並保持它。 – dasblinkenlight

回答

3

對於:推動東西具有除非你push esp對原沒有影響,因爲PUSH指令通常修改ESP(或sprsp,這取決於當前的處理器模式)。

Pop將覆蓋當前位於堆棧頂部的任何寄存器/位置的當前內容。這將恢復以前的價值,當且僅當您的推動和彈出均衡,所以你

對於:推動東西可以摧毀原來,如果你使用移動語義。有可能使事情超負荷,否則也會發生同樣的情況,但它通常是不明智的(至少可以這麼說)。

僅彈出僅從堆棧中移除項目。您可以從堆棧頂部複製一個物品(或者可以像堆疊一樣使用的集合,例如vectordeque),然後單獨彈出以從堆棧中移除該物品。

+0

非常感謝您的幫助Jerry :) –