1. 再谈队列
回顾一下之前所学的队列,队列和栈不同,队列是一种先进先出的数据结构,STL的队列内容极其重要,虽然内容较少但是请务必掌握,STL的队列是快速构建搜索算法以及相关的数论图论的状态存储的基础。
2.相关头文件
头文件:#include<queue>
3.初始化
格式为:
explicit queue (const container_type& ctnr = container_type());
我们以int类型作为参数为例进行创建。
queue<int> q; //创建一个空的没有数据的队列q queue<int> qoo(q); //创建一个队列其元素为q的全部内容
标准的队列创建方法是直接创建空队列再进行其他的操作,由于队列的特殊性质,拥有其他容器的参数可以这样创建,这种多参数的方式可能有一些复杂,一般也很少这样使用。
vector<int> v(3,100); queue<int,vector<int> > s(v); //注意,> >符号之间需要有一个空格隔开
通过标准的方式创建向量数组,然后通过复制构造函数的方式进行创建,其内容就是vector数组的全部内容。
4. 迭代器
栈和队列都属于一种特殊的数据结构,只能通过访问顶层数据并不断剔除数据的方法进行全部访问,因此没有直接的迭代器。
5. 常用接口
我们预先通过queue<int> q创建了一个队列,命名为q,方便举例。
a)大小size()
返回队列元素的个数
函数原型:size_type size() const;
cout<<q.size()<<endl; //直接返回队列元素的个数
b) 入队push()
进行入队操作,在队尾处进行插入
函数原型:void push (const value_type& val);
q.push(100);
c) 出队pop()
进行出队操作,在对头出进行弹出
函数原型:void pop();
q.pop();
d)访问队头元素front()
访问对头元素,可以返回其数值,也可以进行相应的操作,这里更加建议多使用front()访问队头数据,因为我们进行出队操作均是从队头进行出队的。
函数原型:
value_type& front();
const value_type& front() const;
q.front()+=500; //对队头元素进行修改 cout<<q.front()<<endl; //直接输出内容
e) 访问队尾元素back()
访问队尾元素,较为少用。
函数原型:
value_type& back();
const value_type& back() const;
q.back()+=500; //对队尾元素进行修改 cout<<q.back()<<endl;
f) 判空empty()
返回一个bool类型的值,只存在真和假,当队列为空时为真,不为空时为假
函数原型
bool empty() const;
可以利用empty()进行队列的遍历操作,这里建议先使用初始化函数将队列进行复制,否则遍历之后队列就为空了。
while(q.empty()){ cout<<q.front()<<endl; q.pop(); }
6. 相关配套习题
我们可以回顾队列的相关题目再度进行联系,熟悉STL 的简化方法,为搜索算法的学习做预备。
[第四章—队列的内容]
试着使用STL完成队列基本操作
作业:1898题
1898 | 蓝桥杯算法提高VIP-合并石子 |
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程