我有一个关于堆栈的快速问题,我一直在想这个问题。
如果你给变量一个值,然后将它们压入栈中,一旦它们被放入栈中,它们是否仍然包含相同的值,或者这些值是否会变为“空”并且你必须在栈中改变它们?
按照我的理解,一旦你从堆栈中弹出一个变量,它就会返回到变量被压入之前的值,对吗?但是变量在被推送时是否也会保留其值?
提前致谢!
最佳答案
对于 assembly : 推送内容对原始内容没有影响,除非你 push esp
,因为 PUSH
指令通常会修改 ESP
(或 sp
或 rsp
,取决于当前的处理器模式)。
Pop 将用当前位于堆栈顶部的内容覆盖寄存器/位置的当前内容。当且仅当你的推送和弹出是平衡的时候,这将恢复以前的值,所以你是
对于 c++ :如果您使用移动语义,插入某些东西可能会破坏原件。有可能使事情过载,所以同样的事情也会发生,但通常是非常不可取的(至少可以这么说)。
弹出只是从堆栈中移除一个项目。您从堆栈顶部复制一个项目(或您可以以类似堆栈的方式使用的集合,例如 vector
或 deque
),然后分别弹出以删除堆栈中的那个项目。
关于c++ - 堆栈基础,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20110256/