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

Gab*_*iel 2 c++ stack

我一直在阅读C++ 实用C++编程一书,并遇到了一些名为Stacks的东西.在书中定义,它被定义为用于存储数据的算法.

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

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


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

Jus*_*ner 6

取决于你在谈论哪个堆栈.

第一个是内存中的存储位置.

堆栈是一种后进先出数据结构,无论16/32/64位计算机如何,它仍然非常有用.

正如其他人所说的那样,调用堆栈(或"堆栈")是堆栈运行的一个例子.

  • 调用堆栈也是先进先出.所以它不是一种不同的堆栈 - 它只是堆栈的一个例子. (6认同)

Seb*_*ach 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;
...
}
Run Code Online (Sandbox Code Playgroud)

维基百科有更多使用堆栈数据结构的示例.使用堆栈可以相对容易地解决一些排序问题.

与所有数据结构一样,C++中有相当一部分(列表,队列,集合,映射(也称为关联数组,也就是字典),数组/向量等),您现在可能不需要它们,甚至可能不需要它们几年,但你应该了解它们,它们的性质,优点,缺点,以及什么时候使用它们.