第九层(6):STL之queue

简介: 第九层(6):STL之queue

前情回顾


在上一块石碑中,我学到了stack容器的基础操作,同时下一块石碑也显露出来…


🚄上章地址:第九层(5):STL之stack


queue


概念


queue是一种先进先出的数据结构,队列,它有两个出口

0a2653c851af460fa595bd959398a8f1.png


queue容器需要注意的地方


队列之允许对头移除数据,从队尾增加数据,因此队列中只有队头和队尾能被外界使用,因此是无法被遍历的,与stack基本是一样的,queue想要访问中间的数据的时候,只能把前面的数据一直往外拿,使用质变算法。


queue类内的构造函数


queue的构造函数与stack一样,都是只有默认构造和拷贝

queue< T >;//默认构造
queue(const queue &q);//拷贝构造函数,可以将q的值拷贝到本身


使用:


#include<queue>
#include<iostream>
using namespace std;
void test1()
{
  queue<int> q;
  q.push(1);
  cout << q.front() << endl;
  queue<int> q1(q);
  cout << q1.front() << endl;
}
int main()
{
  test1();
  return 0;
}

0a2653c851af460fa595bd959398a8f1.png


queue类内的赋值操作


queue同stack一样,只有一种方法进行赋值操作

queue& operator=(const queue &q);//操作符重载,将q的值拷贝赋值到本身


使用:


#include<queue>
#include<iostream>
using namespace std;
void test1()
{
  queue<int> q;
  q.push(1);
  cout << q.front() << endl;
  queue<int> q1;
  q1 = q;
  cout << q1.front() << endl;
}
int main()
{
  test1();
  return 0;
}

0eacb84100b54626af849e6b562bf92a.png


queue类内的插入操作


在前面说到,queue是队列,只能在队尾进行插入操作,所以插入和stack是一样的,只有一个

push(T elme);//插入elem元素在队尾


使用:


#include<queue>
#include<iostream>
using namespace std;
void test1()
{
  queue<int> q;
  q.push(1);
  cout << q.front() << endl;
}
int main()
{
  test1();
  return 0;
}

2d65d23f6d4748949b924e4057485923.png


queue类内的删除操作


前面提到队列只能在队头删除

pop();//从队头删除元素


使用:


#include<queue>
#include<iostream>
using namespace std;
void test1()
{
  queue<int> q;
  q.push(1);
  cout << q.front() << endl;
  q.push(2);
  q.pop();
  cout << q.front() << endl;
}
int main()
{
  test1();
  return 0;
}

2e9b90b2ca334476abebe75bafe6eeaa.png


queue类内的访问


因为队列在队尾插入,在队头删除,所以能访问到两端

back()://访问尾部元素
front();//访问头部元素


使用:

#include<queue>
#include<iostream>
using namespace std;
void test1()
{
  queue<int> q;
  q.push(1);
  q.push(2);
  cout << q.front() << endl << q.back() << endl;;
}
int main()
{
  test1();
  return 0;
}

0a2653c851af460fa595bd959398a8f1.png


queue类内的大小操作


那queue可以用size计算大小吗?是可以的,与stack基本一样,在队尾插入时,加一,队头减去的时候减一,同样可以查看类内有没有元素

empty();//判断队列是否为空,为空返回真
size();//返回队列内元素大小


使用:


#include<queue>
#include<iostream>
using namespace std;
void test1()
{
  queue<int> q;
  if (q.empty())
  {
  cout << "q为空" << endl;
  }
  cout << q.size() << endl;
}
int main()
{
  test1();
  return 0;
}

0eacb84100b54626af849e6b562bf92a.png


下一座石碑


这座石碑倒下了,露出了下一座石碑…


😘预知后事如何,关注新专栏,和我一起征服C++这座巨塔

🚀专栏:C++爬塔日记

🙉都看到这里了,留下你们的👍点赞+⭐收藏+📋评论吧🙉


相关文章
|
SQL Java 关系型数据库
[笔记]【IDEA2020.2 Ultra】JSP+Servelt+JDBC+Tomcat Helloworld+增删改查(二)
[笔记]【IDEA2020.2 Ultra】JSP+Servelt+JDBC+Tomcat Helloworld+增删改查(二)
177 0
|
11月前
|
Python
用Pygame Zero 画矩形 (空心、实心、多个矩形、多层同心矩形、彩虹条矩形、条纹相间、随机颜色矩形、特殊效果、渐变效果)
用Pygame Zero 画矩形 (空心、实心、多个矩形、多层同心矩形、彩虹条矩形、条纹相间、随机颜色矩形、特殊效果、渐变效果)
323 40
|
存储 NoSQL Redis
【Redis从头学-12】Redis主从复制和读写分离的多种部署方式解析(普通方式、Docker搭建方式、Docker-Compose搭建方式)上
【Redis从头学-12】Redis主从复制和读写分离的多种部署方式解析(普通方式、Docker搭建方式、Docker-Compose搭建方式)
385 0
windows 乱码之 gbk 与 cp936|4-3
windows 乱码之 gbk 与 cp936|4-3
|
弹性计算 监控 网络协议
记一个诡异的TCP挥手乱序问题
tcp四次挥手是超经典的网络知识,但是网络中的异常状况千奇百怪,说不定会“偷袭”到标准流程的盲区。最近笔者遇到了一个罕见的挥手乱序问题,经过对内核代码的分析和试验,最后终于找到了原因,角度可谓刁钻。本文从技术视角,将排查过程记录下来,既是对整个过程的小小总结,将事情彻底完结掉,也是对tcp实现的一些细节的学习记录。
138049 11
|
机器学习/深度学习 算法 TensorFlow
Python 强化学习实用指南:1~5
Python 强化学习实用指南:1~5
295 1
解决ERROR in Conflict: Multiple assets emit different content to the same filename index.html 的问题
解决ERROR in Conflict: Multiple assets emit different content to the same filename index.html 的问题
1157 0
|
缓存 安全 网络协议
简要聊聊UNIX,MINIX,LINUX,BSD的区别与特质
# 聊聊linux,minux,bsd,unix的历史与区别 Linux、MINIX、BSD和UNIX都是类UNIX操作系统,它们都是基于UNIX操作系统的,但也有很多不同点。 UNIX操作系统最早由贝尔实验室的Ken Thompson和Dennis Ritchie于1970年代初开发。Unix是商业操作系统,主要应用于大型机和服务器领域,具有高性能和可靠性。但Unix的源代码是封闭的,用户只能购买许可证来使用。
简要聊聊UNIX,MINIX,LINUX,BSD的区别与特质
|
缓存 算法 Java
亿级数据过滤算法----布隆过滤器
亿级数据过滤算法----布隆过滤器
|
存储 缓存 Java
解析 Java 数据结构:深入了解映射(Map)的特点与应用
在 Java 编程中,映射(Map)是一种非常重要的数据结构,用于存储键值对(Key-Value pairs),其中每个键都唯一对应一个值。映射在实际应用中有着广泛的应用,如数据库索引、缓存管理、配置