【问题标题】:Basics of Stacks堆栈基础
【发布时间】:2013-12-05 06:58:33
【问题描述】:

我有一个关于堆栈的快速问题,我一直想知道。

如果你给变量一个值,然后将它们压入堆栈,一旦它们被放入堆栈中,它们是否仍然包含相同的值,或者这些值会变为“空”并且你必须在堆栈中更改它们?

按照我的理解,一旦你从堆栈中弹出一个变量,它将返回到变量被压入之前的值,对吗?但是,当变量被推送时,它会保留它的值吗?

提前致谢!

【问题讨论】:

  • 我们说的是std::stack<T>,对吧?
  • 将变量压入堆栈不同于将橙子压入袋子:语义是应用复制而不是移动的语义。这就像把你的橙子塞进袋子里一样,也要把它留着。

标签: c++ assembly stack


【解决方案1】:

对于:推送某些东西对原始文件没有影响,除非你push esp,因为PUSH指令通常会修改ESP(或sprsp,取决于当前的处理器模式)。

Pop 将使用当前位于堆栈顶部的任何内容覆盖寄存器/位置的当前内容。当且仅当您的推送和弹出平衡时,这将恢复以前的值,所以您是

对于:如果您使用移动语义,推动某些东西可能会破坏原件。有可能使事情超载,所以同样会发生同样的情况,但通常是不可取的(至少可以这么说)。

弹出只会从堆栈中删除一个项目。您从堆栈顶部复制一个项目(或者您可以以类似堆栈的方式使用的集合,例如 vectordeque),然后单独弹出以从堆栈中删除该项目。

【讨论】:

  • 非常感谢您的帮助杰瑞 :)
猜你喜欢
  • 2010-12-14
  • 2013-10-28
  • 2019-07-23
  • 1970-01-01
  • 2016-08-06
  • 2023-03-20
  • 1970-01-01
  • 2017-05-02
  • 2011-05-23
相关资源
最近更新 更多