STL 容器:stack

目录

  • [1 stack 的概念](#1 stack 的概念)
  • [2 stack 的构造方式](#2 stack 的构造方式)
  • [2 stack 的常用接口](#2 stack 的常用接口)
    • [2.2 stack 的操作](#2.2 stack 的操作)
      • [2.2.1 empty()](#2.2.1 empty())
      • [2.2.2 size()](#2.2.2 size())
      • [2.2.3 top()](#2.2.3 top())
      • [2.2.4 push()](#2.2.4 push())
      • [2.2.5 pop()](#2.2.5 pop())
      • [2.2.6 swap()](#2.2.6 swap())

stack 的技术文档: 文档链接

1 stack 的概念

stack 是 STL 容器之一,它实现自数据结构当中的栈

与数据结构中的栈相同,stack 也只能在栈顶插入数据,删除数据,遵循后进先出的原则

要注意,这里的栈指的不是内存当中用来存放形参,局部变量的栈,而是一种用来存放数据,操作受限的线性表

要使用 stack,就需要包含头文件 stack,由于容器都是定义在 std 命名空间下的,所以还需要指定命名空间 std

cpp 复制代码
#include <stack>

2 stack 的构造方式

在构造 stack 时,要使用以下的语法:

cpp 复制代码
stack<数据类型, 内部所用的数据结构> 对象名();

其中,数据类型和对象名是必须要给定的,内部所用的数据结构与括号这两个信息不是必须的,如果不指定内部所用的数据结构,那么 stack 的内部用的结构就是 deque(一种顺序表和链表的结合),指定了内部所用的数据结构则使用指定的。

构造 stack 有两个方式:

(1)构造空的 stack

对象名后不加括号,就是在构造空的 stack

cpp 复制代码
int main()
{
	stack<int> s1;
	return 0;
}

(2)通过已有的容器对象来构造 stack

用这种方式构造 stack 时,需要将 stack 内部所用的数据结构更改为用来初始化 stack 的容器对象的结构

cpp 复制代码
int main()
{
	vector<int> v1(2, 200); //用来初始化栈的vector
	stack<int, vector<int>> s1(v1); //构造栈所用的数据结构需要更改为vector
	return 0;
}

2 stack 的常用接口

2.2 stack 的操作

stack 的操作主要有:

接口名称 功能
empty 检查栈是否为空
size 获取栈中的元素个数
top 获取栈顶元素
push 将元素插入到栈顶
pop 将栈顶元素移除
swap 交换两个栈中的值

2.2.1 empty()

empty 的功能主要是检查栈是否为空,是空返回 true,非空则返回 false

cpp 复制代码
int main()
{
	stack<int> s1;
	if (s1.empty())
		cout << "s1 is empty" << endl;
	else
		cout << "s1 is not empty" << endl;

	stack<int> s2;
	s2.push(1);
	s2.push(2); //插入两个值到栈中
	if (s2.empty())
		cout << "s2 is empty" << endl;
	else
		cout << "s2 is not empty" << endl;

	return 0;
}

最终的结果为:

cpp 复制代码
s1 is empty
s2 is not empty

2.2.2 size()

size() 的主要功能是获取栈内元素的个数

cpp 复制代码
int main()
{
	stack<int> s1;
	s1.push(1);
	s1.push(2);
	cout << s1.size() << endl;
	return 0;
}

最终结果为:

cpp 复制代码
2

2.2.3 top()

top 的作用主要是获取栈顶的元素

cpp 复制代码
int main()
{
	stack<int> s1;
	s1.push(1);
	s1.push(2);
	cout << s1.top() << endl;
	return 0;
}

最终结果为:

cpp 复制代码
2

2.2.4 push()

push 的作用主要是将元素入栈并更新size,入栈后,该元素位于栈顶

cpp 复制代码
int main()
{
	stack<int> s1;
	s1.push(1);
	s1.push(2);
	return 0;
}

2.2.5 pop()

pop 的作用主要是将栈顶元素出栈并更新 size

cpp 复制代码
int main()
{
	stack<int> s1;
	s1.push(1);
	s1.push(2);
	s1.pop();
	return 0;
}

2.2.6 swap()

swap 的作用主要是交换两个栈中的内容

cpp 复制代码
int main()
{
	stack<int> s1;
	s1.push(1);
	s1.push(2);

	stack<int> s2;
	s2.push(5);
	s2.push(6);

	s1.swap(s2);
	return 0;
}

交换前:

交换后:

相关推荐
Chester_19995 小时前
CSP202203C.计算资源调度器
开发语言·数据结构·c++·蓝桥杯
EXI-小洲7 小时前
Java 操作 Word:字符串替换、图片插入、动态生成表格与API接口下载
java·开发语言·spring boot·word
会周易的程序员7 小时前
给 PLC 写一个字节码虚拟机:STVM 虚拟机架构设计
开发语言·c++·虚拟机·软plc·iec61131·stvm
机器视觉知识推荐、就业指导7 小时前
为什么老说“纯 Qt 没啥就业市场”?
开发语言·qt
telepan7 小时前
Qt 开发避坑与性能指南:如何优雅、安全地定义全局常量字符串?
开发语言·qt
小灰灰搞电子7 小时前
完全驾驭 Qt 与数据库:C++ ORM 框架 QxOrm 原理与实践指南
数据库·c++·qt
QT界面美化性能优化7 小时前
QT+AI:使用AI技术为QT应用程序赋能
c++·人工智能·qt·opencv·qt教程·qt6.3
m0_695251497 小时前
Qt MaintenanceTool 使用国内镜像加速下载(超详细教程)
开发语言·qt
大衛說9 小时前
《Python 从入门到精通》系列总览与学习路线
开发语言·python·学习
学习星球10 小时前
单调栈——从“找下一个更大的“到柱状图中的最大矩形
数据库·c++·算法·leetcode·xcode