我一直在用Practical C++ Programming一书评论C ++,并遇到了一些名为Stacks的东西。在书中定义,它被定义为存储数据的算法。
从我在书中看到的,它看起来很像装配......我还记得读过一些关于16位的东西。
所以我的问题:什么是堆栈用于,它们是否仍然有用,或者它是一种做旧的方法,可以使用32/64位计算机更简单有效地完成?我真的很困惑堆栈服务的目的。
编辑:由于我的问题是如此模糊,我会改写它...什么是堆栈,什么时候应该使用它。
答案 0 :(得分:6)
取决于您正在谈论的堆栈。
第一个是内存中的存储位置。
堆栈是一种后进先出的数据结构,无论16/32/64位计算机如何,它仍然非常有用。
正如其他人所说的那样,调用堆栈(或“堆栈”)就是一个堆栈的实例。
答案 1 :(得分:6)
堆栈不是一种方法,而是一种数据结构,后进先出(LIFO)。
在C ++中,std::stack<>
是一个类模板,其数据可以是任何类型。在许多情况下,后进先出正是您所需要的。
一个示例是虚拟机或解释器,它们利用堆栈架构在执行功能/过程期间保存运行状态。请考虑以下语言的解释器,其中子过程可能不会更改调用者的状态:
std::stack<RunState> state;
Instruction i = fetch();
switch (i.type()) {
case Instruction.Call:
state.push (state.top());
break;
case Instruction.Return:
state.pop();
break;
...
}
维基百科有more examples来使用堆栈数据结构。使用堆栈可以相对容易地解决一些排序问题。
与所有数据结构一样,C ++中有相当一部分(lists,queues,sets,maps (a.k.a. associative arrays, a.k.a. dictionaries),arrays/vectors等等) ,你现在可能不需要它们,甚至可能在2年内也不需要它们,但是你应该了解它们,它们的性质,优点,缺点,以及什么时候使用它们。
答案 2 :(得分:4)
基本上,当您需要以LIFO(后进先出)方式存储数据时,可以使用它们。您可以找到信息here。 使用16/32/64 /无论位架构与堆栈原理无关。
答案 3 :(得分:2)
在标准LIFO逻辑的情况下,您可以使用堆栈。有很多问题需要LIFO逻辑。