C语言到C++STL菜鸟教程:再谈队列Queue容器

2022-07-1712:47:47编程语言入门到精通Comments1,265 views字数 1336阅读模式

1. 再谈队列文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25121.html

回顾一下之前所学的队列,队列和栈不同,队列是一种先进先出的数据结构,STL的队列内容极其重要,虽然内容较少但是请务必掌握,STL的队列是快速构建搜索算法以及相关的数论图论的状态存储的基础。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25121.html

2.相关文件文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25121.html

头文件:#include<queue>文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25121.html

3.初始化文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25121.html

格式为:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25121.html

explicit queue (const container_type& ctnr = container_type());

我们以int类型作为参数为例进行创建。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25121.html

queue<int> q;    //创建一个空的没有数据的队列q
queue<int> qoo(q);    //创建一个队列其元素为q的全部内容

标准的队列创建方法是直接创建空队列再进行其他的操作,由于队列的特殊性质,拥有其他容器的参数可以这样创建,这种多参数的方式可能有一些复杂,一般也很少这样使用。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25121.html

vector<int> v(3,100);           
    queue<int,vector<int> > s(v);  //注意,> >符号之间需要有一个空格隔开

通过标准的方式创建向量数组,然后通过复制构造函数的方式进行创建,其内容就是vector数组的全部内容。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25121.html

4. 迭代器文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25121.html

栈和队列都属于一种特殊的数据结构,只能通过访问顶层数据并不断剔除数据的方法进行全部访问,因此没有直接的迭代器。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25121.html

5. 常用接口文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25121.html

我们预先通过queue<int> q创建了一个队列,命名为q,方便举例。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25121.html

a)大小size()文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25121.html

返回队列元素的个数文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25121.html

函数原型:size_type size() const;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25121.html

cout<<q.size()<<endl;   //直接返回队列元素的个数

b) 入队push()文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25121.html

进行入队操作,在队尾处进行插入文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25121.html

函数原型:void push (const value_type& val);文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25121.html

q.push(100);

c) 出队pop()文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25121.html

进行出队操作,在对头出进行弹出文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25121.html

函数原型:void pop();文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25121.html

q.pop();

d)访问队头元素front()文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25121.html

访问对头元素,可以返回其数值,也可以进行相应的操作,这里更加建议多使用front()访问队头数据,因为我们进行出队操作均是从队头进行出队的。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25121.html

函数原型:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25121.html

value_type& front();文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25121.html

const value_type& front() const;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25121.html

q.front()+=500;     //对队头元素进行修改
    cout<<q.front()<<endl;   //直接输出内容

e) 访问队尾元素back()文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25121.html

访问队尾元素,较为少用。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25121.html

函数原型:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25121.html

value_type& back();文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25121.html

const value_type& back() const;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25121.html

q.back()+=500;     //对队尾元素进行修改
    cout<<q.back()<<endl;

f) 判空empty()文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25121.html

返回一个bool类型的值,只存在真和假,当队列为空时为真,不为空时为假文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25121.html

函数原型文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25121.html

bool empty() const;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25121.html

可以利用empty()进行队列的遍历操作,这里建议先使用初始化函数将队列进行复制,否则遍历之后队列就为空了。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25121.html

 while(q.empty()){
        cout<<q.front()<<endl;
        q.pop();
    }
文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/25121.html
  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/ymba/25121.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定