第二讲. STL容器之队列与栈

1. STL容器

STL容器是C++中封装好的可以直接供用户使用的数据结构,它和数组有些类似,事实上很多STL也完全可以由数组模拟实现,但显然没有直接调用已经封装好的STL容器方便。除此之外,还有一个最大的特点是,STL容器是一种动态的容器,它的内存空间的分配是动态分配的,而不像数组,在声明的一开始就需要指明数组的容量大小。

2. 队列

2.1 简介

队列,顾名思义,就是一种模拟队伍或排队的数据结构,它的特点是先进先出,就是说每次从队列容器中取出的元素都是当前队伍的队首元素,每次插入到队列中的元素都是插到队尾,这就很像食堂吃饭时排队一样,后来的人不能插队,得到队伍末尾,每次食堂阿姨盛饭都是给队首的同学盛饭,然后队首的同学离开队伍。

出队<— x1 <— x2 <— x3 <— <— xn-1 <— xn <— 入队
   队首元素                  队尾元素

2.2 头文件引入

#include <queue>

2.3 实例化对象

queue<T> Q;//声明一个元素类型为T的队列

其中,尖括号里的 T 表示队列中每一个元素的类型,可以是int、double、float、char等基本变量类型,也可以是用户自定义的struct结构体类型。
如定义一个以int为元素类型的队列Q:

queue<int> Q;

2.4 相关属性或方法

方法返回类型含义
Q.front()T返回队列的队首元素
Q.back()T返回队列的队尾元素
Q.pop()void队首元素出队,即删除最先进来的元素
Q.empty()bool返回队列是否为空,true表示队列为空,false表示队列为非空
Q.size()int返回队列的长度,即队列中元素的个数

其中,T表示队列中的元素类型。

2.5 代码例子

#include <iostream>
#include <queue>
using namespace std;
int main(){
	queue<int> Q;//实例化一个队列对象,队列中的元素类型为int
	cout<<Q.empty()<<endl;//输出1,因为此时队列为空
	cout<<Q.size()<<endl;//输出0,此时队列中有0个元素
	Q.push(1);//将int元素1插入队列 -> Q: 1
	Q.push(2);//讲int元素2插入队列 -> Q: 1 2
	cout<<Q.size()<<endl;//输出2,此时队列中有2个元素
	cout<<Q.front()<<endl;//输出1,即此时的队首元素为1
	Q.pop();//队首元素出队,即将元素1移除队列。 -> Q: 2
	cout<<Q.front()<<endl;//输出2,即此时的队首元素为2
	cout<<Q.size()<<endl;//输出1,即此时队列中有1个元素
	Q.push(5);//将int元素5插入队列 -> Q: 2 5
	cout<<Q.back()<<endl;//输出5,即此时的队尾元素为5
	cout<<Q.size()<<endl;//输出2,此时队列中有2个元素
	return 0;
}

3. 栈

3.1 简介

栈,是一种类似于叠盘子的数据结构,它的特点是后进先出,就是说每次从栈元素中取出的元素都是当前的栈顶元素,每次压入栈中的元素也是压入栈顶,这就很像一堆叠起来的盘子,只有先取走顶端的盘子,才能取下面的盘子,新的盘子要放进来也只能放到顶部,而不能插到中间或者底部。
这里贴上百度百科上的图供大家理解。
stack

3.2 头文件引入

#include <stack>

3.3 实例化对象

和队列类似

stack<T> S;//声明一个元素类型为T的栈

其中,尖括号里的 T 表示队列中每一个元素的类型,可以是int、double、float、char等基本变量类型,也可以是用户自定义的struct结构体类型。
如定义一个以int为元素类型的栈S:

stack<int> S;

3.4 相关属性或方法

方法返回类型含义
S.top()T返回栈顶元素
S.pop()void栈顶元素出栈,即删除最后进来的元素
S.empty()bool返回栈是否为空,true表示栈为空,false表示栈为非空
S.size()int返回栈的大小,即栈中元素的个数

其中,T表示队列中的元素类型。

3.5 代码例子

#include <iostream>
#include <stack>
using namespace std;
int main(){
	stack<int> S;//实例化一个栈对象,队列中的元素类型为int
	cout<<S.empty()<<endl;//输出1,因为此时栈为空
	cout<<S.size()<<endl;//输出0,此时栈中有0个元素
	S.push(1);//将int元素1压入栈 -> Q: 1
	S.push(2);//讲int元素2压入栈 -> Q: 2 1
	cout<<S.size()<<endl;//输出2,此时栈中有2个元素
	cout<<S.top()<<endl;//输出2,即此时的栈顶元素为2
	S.pop();//栈顶元素出栈,即将元素2移除栈。 -> Q: 1
	cout<<S.top()<<endl;//输出1,即此时的栈顶元素为1
	cout<<S.size()<<endl;//输出1,即此时栈中有1个元素
	S.push(5);//将int元素5压入栈 -> Q: 5 1
	cout<<S.size()<<endl;//输出2,此时栈中有2个元素
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值