【C++】STL----stack和queue常见用法

🔥个人主页🔥:孤寂大仙V

🌈收录专栏🌈:C++从小白到高手

🌹往期回顾🌹:【C++】list常见用法

🔖 流水不争,争的是滔滔不息。

文章目录


一、stack的介绍

在 C++ 中,stack 是一种标准模板库(STL)提供的容器适配器,它遵循"后进先出"(LIFO, Last In First Out)的原则。这意味着最后插入的元素最先被访问。stack 是通过底层容器(如 vector 或 deque)实现的。

stack的使用



构造空的栈

cpp 复制代码
stack<int> s1();


检测stack是否为空

cpp 复制代码
stack<int> s2;
s2.push(1);
s2.push(2);
s2.push(3);
s2.push(4);
s2.push(5);

if (s2.empty())
{
	cout << "k" << endl;
}
else
{
	cout << "m" << endl;
}


返回stck中元素的个数

cpp 复制代码
stack<int> s3;
s3.push(1);
s3.push(2);
s3.push(3);
s3.push(4);
s3.push(5);

cout << s3.size() << endl;


返回栈顶元素的引用

cpp 复制代码
stack<int> s4;
s4.push(1);
s4.push(2);
s4.push(3);
s4.push(4);
s4.push(5);

cout << s4.top() << endl;


将元素val压入stack中

前面的演示代码都是用的push

cpp 复制代码
stack<int> s4;
s4.push(1);
s4.push(2);
s4.push(3);
s4.push(4);
s4.push(5);

cout << s4.top() << endl;

将stack中尾部的元素弹出

cpp 复制代码
stack<int> s5;
s5.push(1);
s5.push(2);
s5.push(3);
s5.push(4);
s5.push(5);

s5.pop();

cout << s5.size() << endl;

弹出栈中的最后一个元素后,这个栈就有四个元素了。

二、queue的介绍

在C++中,queue 是一个非常有用的容器适配器,它提供了一种先进先出(FIFO, First In First Out)的数据结构。queue 是一种线性数据结构,其中元素的添加(enqueue)发生在队列的一端(称为队尾),而元素的移除(dequeue)发生在另一端(称为队首)。这种特性使得 queue 成为处理一系列需要按顺序处理的任务或事件的理想选择。

queue的使用



构造空的队列

cpp 复制代码
queue<int> q1();


判断队列是否为空,是返回true,否返回false

cpp 复制代码
queue<int> s7;
s7.push(1);
s7.push(2);
s7.push(3);
s7.push(4);
s7.push(5);

cout << s7.empty() << endl;


返回队列中有效元素的个数

cpp 复制代码
queue<int> s8;
s8.push(1);
s8.push(2);
s8.push(3);
s8.push(4);
s8.push(5);

cout << s8.size() << endl;


返回对头元素的引用
返回队尾元素的引用

cpp 复制代码
queue<int> s9;
s9.push(1);
s9.push(2);
s9.push(3);
s9.push(4);
s9.push(5);

cout << s9.front() << endl;
cout << s9.back() << endl;


在队尾将元素val入队列

cpp 复制代码
queue<int> s9;
s9.push(1);
s9.push(2);
s9.push(3);
s9.push(4);
s9.push(5);

将对头元素出队列

cpp 复制代码
queue<int> s10;
s10.push(1);
s10.push(2);
s10.push(3);
s10.push(4);
s10.push(5);
cout << s10.size() << endl;

s10.pop();

cout << s10.size() << endl;

出队列前队列里有5个元素,出队列后队列里还有4个元素。

三、优先级队列(priority_queue)的介绍

优先级队列(Priority Queue)是一种特殊的队列数据结构,它在普通队列的基础上增加了元素优先级的概念。在优先级队列中,每个元素都有一个优先级标签与之关联,优先级最高的元素会最先被移除(出队)。这种数据结构广泛应用于多种算法和场景中,比如任务调度、事件处理、堆排序等。

其实优先级队列就是数据结构中的堆!

优先级队列默认使用 vector 作为其底层存储数据的容器,在 vector 上又使用了堆算法将 vector 中 元素构造成堆的结构,因此 priority_queue 就是堆,所有需要用到堆的位置,都可以考虑使用 priority_queue 。注意:默认情况下 priority_queue 是 大堆 。

优先级队列的使用



构造一个空的优先级队列

cpp 复制代码
vector<int> v{ 2,5,3,7,9,10,4,6,8,1 };
priority_queue<int> q1;
for (auto e : v)
{
	q1.push(e);
}
cout << q1.top() << endl;//默认建大堆	

这段代码里面的q1就是构造的空的优先级队列。然后把vector容器中的元素放进去。

检测优先级队列是否为空,是返回true,否返回false。

cpp 复制代码
vector<int> v{ 2,5,3,7,9,10,4,6,8,1 };
priority_queue<int> q2;
for (auto e : v)
{
	q2.push(e);
}

cout << q2.empty() << endl;


返回优先级队列中最大元素,即堆顶元素

cpp 复制代码
vector<int> v{ 2,5,3,7,9,10,4,6,8,1 };
priority_queue<int> q1;
for (auto e : v)
{
	q1.push(e);
}
cout << q1.top() << endl;//默认建大堆	


在优先级队列中插入元素x

cpp 复制代码
vector<int> v{ 2,5,3,7,9,10,4,6,8,1 };
priority_queue<int> q1;
for (auto e : v)
{
	q1.push(e);
}
cout << q1.top() << endl;//默认建大堆	

把vector容器中的元素放入优先级队列中。

删除优先级队列中最大元素,即堆顶元素

cpp 复制代码
vector<int> v{ 2,5,3,7,9,10,4,6,8,1 };
priority_queue<int> q3;
for (auto e : v)
{
	q3.push(e);
}

q3.pop();

cout << q3.top() << endl;

删除堆顶元素之前,堆顶元素为10,删除堆顶元素之后优先级列表重新调整,堆顶元素为9.

相关推荐
点心的游戏开发世界4 小时前
GDScript 入门笔记(十一):Lambda 与匿名函数
开发语言·笔记·游戏引擎·godot
RuoZoe5 小时前
从 2026 年 3 月 1 日开源,到 26.10.9:Jalium UI 半年时间到底走了多远?
c语言·c++
事圆则缓6 小时前
Kotlin 协程完全指南
开发语言·kotlin
鱼子星_7 小时前
【C++】继承和多态(上)
c++·笔记
我爱写代码i7 小时前
BeLink - 支持生成多种URL 缩短网址PHP源码
开发语言·php·短网址php源码
Java后端的Ai之路7 小时前
20、Python - 备忘录模式
开发语言·人工智能·python·外观模式·备忘录模式
统计学小王子8 小时前
数学建模国赛倒计时4天——《统计模型精讲(混合效应模型R语言实现)》
开发语言·数学建模·r语言
知无不研8 小时前
c语言中循环的介绍与简单应用
c语言·开发语言·算法·循环·for·while
郝学胜-神的一滴8 小时前
Qt 高级编程 045:坐标体系深度实战
开发语言·c++·windows·python·qt·程序人生
码匠许师傅8 小时前
【设计模式精讲】22.中介者模式(Mediator)
c++·设计模式·软件工程·uml·中介者模式