📜  C++ STL 中的堆栈列表(1)

📅  最后修改于: 2023-12-03 15:29:49.980000             🧑  作者: Mango

C++ STL 中的堆栈列表

在 C++ STL(标准模板库)中,堆栈列表(stack)是一种容器适配器,它使得任何以先进后出方式访问元素的容器向用户提供与堆栈数据结构类似的接口。

堆栈列表提供了常量时间复杂度的 push 和 pop 操作,以及常量时间复杂度的 top 操作来访问堆栈顶部元素。

使用堆栈列表,您可以轻松地实现使用堆栈数据结构的算法,例如深度优先搜索、迷宫求解和括号匹配等。

堆栈列表的实现

堆栈列表是在 vector、deque 和 list 等其他容器之上实现的容器适配器。在底层实现中,堆栈列表首选 deque 的实现,因为它提供了常数时间的插入和删除操作,而 vector 会导致更多的内存复制。但是,在某些情况下,如果只需使用少量元素,则使用 vector 也是可以的。

为了使用堆栈列表,您需要包含头文件 "stack":

#include <stack>

然后,您可以定义堆栈列表实例,如下所示:

std::stack<int> myStack;

这将定义一个名为 myStack 的整数类型的堆栈列表。您可以像使用堆栈一样使用堆栈列表,如下所示:

myStack.push(1);
myStack.push(2);
myStack.push(3);
int top = myStack.top(); // top = 3
myStack.pop();
top = myStack.top(); // top = 2

上面的代码分别将数字 1、2 和 3 推入堆栈列表中,然后将堆栈顶部元素弹出,最后将堆栈顶部元素赋值给变量 top。

堆栈列表的成员函数

堆栈列表提供了几个有用的成员函数,使得对堆栈的访问更加容易和直观。

push

将元素推入堆栈顶部:

void push (const value_type& val);

其中,value_type 表示堆栈中存储的数据类型。例如,当您定义一个整数类型的堆栈列表时,value_type 就是 int。

示例:

std::stack<int> myStack;
myStack.push(1);
myStack.push(2);
myStack.push(3);

上面的代码将数值 1、2 和 3 推入堆栈列表中。

top

返回堆栈顶部元素的引用:

value_type& top();

示例:

std::stack<int> myStack;
myStack.push(1);
myStack.push(2);
myStack.push(3);
int top = myStack.top(); // top = 3
pop

弹出堆栈顶部元素:

void pop();

示例:

std::stack<int> myStack;
myStack.push(1);
myStack.push(2);
myStack.push(3);
myStack.pop();
int top = myStack.top(); // top = 2
empty

如果堆栈列表为空,则返回 true,否则返回 false:

bool empty() const;

示例:

std::stack<int> myStack;
bool isEmpty = myStack.empty(); // isEmpty = true
myStack.push(1);
isEmpty = myStack.empty(); // isEmpty = false
size

返回堆栈列表中元素的数量:

size_t size() const;

示例:

std::stack<int> myStack;
size_t size = myStack.size(); // size = 0
myStack.push(1);
myStack.push(2);
size = myStack.size(); // size = 2
总结

堆栈列表是一种非常有用的容器适配器,它提供了一种用于按照后进先出顺序访问元素的方式。由于其简单性和易用性,它在许多算法和数据结构中都得到了广泛的应用。

在实际编程中,要根据具体情况选择使用 vector、deque 或 list 等底层容器,并充分利用堆栈列表提供的成员函数来简化对堆栈的操作。