什么是堆栈用于?他们为什么用C ++?

时间:2011-12-20 16:19:25

标签: c++ stack

我一直在用Practical C++ Programming一书评论C ++,并遇到了一些名为Stacks的东西。在书中定义,它被定义为存储数据的算法。

从我在书中看到的,它看起来很像装配......我还记得读过一些关于16位的东西。

所以我的问题:什么是堆栈用于,它们是否仍然有用,或者它是一种做旧的方法,可以使用32/64位计算机更简单有效地完成?我真的很困惑堆栈服务的目的。


编辑:由于我的问题是如此模糊,我会改写它...什么是堆栈,什么时候应该使用它。

4 个答案:

答案 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 ++中有相当一部分(listsqueuessetsmaps (a.k.a. associative arrays, a.k.a. dictionaries)arrays/vectors等等) ,你现在可能不需要它们,甚至可能在2年内也不需要它们,但是你应该了解它们,它们的性质,优点,缺点,以及什么时候使用它们。

答案 2 :(得分:4)

基本上,当您需要以LIFO(后进先出)方式存储数据时,可以使用它们。您可以找到信息here。 使用16/32/64 /无论位架构与堆栈原理无关。

答案 3 :(得分:2)

在标准LIFO逻辑的情况下,您可以使用堆栈。有很多问题需要LIFO逻辑。