C++之queue和deque

1、queue

        queue(队列),一种数据结构,可以让某些数据结构的操作变得简单。队列(queue)最大的特点就是先进先出。就是说先放入queue容器的元素一定是要先出队列之后,比它后进入队列的元素才能够出队列。

函数:

(1)back()        //返回队列中最后一个元素

(2)empty()     //判断队列是否为空

(3)front()       //返回队列中的第一个元素

(4)pop()        //删除队列的第一个元素

(5)push()      //在队列末尾加入一个元素

(6)size()        //返回队列中元素的个数

(7)emplace()   // 在队尾插入一个元素

(8)swap()      //交换两个队列的元素

2、deque

        双端队列(double-ended queue),两端都可以操作、插入、删除、也可以在中间进行操作。内部采用线性表顺序结构,与vector不同的是,deque采用分块的线性存储结构存储数据,每块大小512字节。所有的deque块使用一个Map块进行管理,每个Map数据项纪录各个deque块的首地址。当考虑容器内部的内存分配策略和操作性能时,deque相对于vector更有优势。

函数:

(1)assign(beg, end);  //将[beg,end)区间中的数据拷贝赋值给本身
(2)assign(n,elem);     //将n个elem拷贝赋值给本身
(3)empty();                //判断容器是否为空
(4)size();                   //返回容器中的元素的个数
(5)resize(num);        //重新指定容器的长度为num,若容器变长,则以默认值填充新位置
                                     //如果容器变短,则末尾超出容器长度的元素被删除
(6)resize(num,elem); //重新指定容器的长度为num,若容器变长,则以elem值填充新位置
                                       //如果容器变短,则末尾超出容器长度的元素被删除
(7)push_back(elem);  //在容器尾部添加一个数据
(8)push_front(elem);  //在容器头部插入一个数据
(9)pop_back();    //删除容器最后一个数据
(10)pop_front();  //删除容器第一个数据
(11)insert(pos,elem);        //在pos位置插入一个elem元素的拷贝,返回新数据的位置
(12)insert(pos,n,elem);    //在pos位置插入n个elem数据,无返回值
(13)insert(pos,beg,end);  //在pos位置插入[beg,end)区间的数据,无返回值
(14)clear();                       //清空容器的所有数据
(15)erase(beg,end);        //删除[beg,end)区间的数据,返回下一个数据的位置
(16)erase(pos);               //删除pos位置的数据,返回下一个数据的位置
(17)at(int idx);                 //返回索引idx所指的数据
(18)operator[];                //返回索引idx所指的数据
(19)front();                      //返回容器中第一个数据元素
(20)back();                      //返回容器中最后一个数据元素

3、示例

#include <queue>
#include <deque>
#include <algorithm>
#include <iostream>
using namespace std;void print_deque(const deque<int>& d)
{cout << "deque: ";for (deque<int>::const_iterator it = d.begin(); it != d.end(); it++){cout << *it << " ";}cout << endl;for (int i = 0; i < d.size(); i++)cout << d[i] << " ";cout << endl;
}int main()
{// 队列queue<int> q1;for (int i = 0; i < 6; i++){q1.push(i);}printf("%d %d\n", q1.front(), q1.back());q1.pop();  // 出队首元素 0q1.pop();  // 出队首元素 1q1.pop();  // 出队首元素 2printf("%d %d\n", q1.front(), q1.back());if (q1.empty() == true)printf("EMPTY! \n");elseprintf("NOT EMPTY! \n");// 双端队列deque<int> q2;deque<int> q3(6, 8);deque<int> q4(q3.begin() + 2, q3.end());deque<int> q5(q3);print_deque(q3);print_deque(q4);print_deque(q5);//尾插q3.push_back(10);q3.push_back(20);//头插q3.push_front(100);q3.push_front(200);print_deque(q3);//尾删q3.pop_back();print_deque(q3);//头删q3.pop_front();print_deque(q3);q3.insert(q3.begin(), 1000);print_deque(q3);q3.insert(q3.begin(), 3, 9999);print_deque(q3);//在d3.begin()的位置,插入区间d2.begin()-d2.end()之间的数q3.insert(q3.begin(), q3.begin(), q3.end());print_deque(q3);//排序sort(q3.begin(), q3.end());print_deque(q3);//删除deque<int>::iterator it = q3.begin();it++;             //第二个元素q3.erase(it);     //q3.erase()为删除所有;  q3.clear()也为清空容器所有数据print_deque(q3);//按区间方式删除q3.erase(q3.begin(), q3.end());print_deque(q3);return 0;
}

结果为:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/512610.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL 多表查询 连接查询 自连接

介绍 自连接查询&#xff0c;可以是内连接查询&#xff0c;也可以是外连接查询&#xff0c;一句话自己连接自己&#xff0c;一个表当作两个表进行连接。 语法 SELECT 字段列表 FROM 表A 别名A JOIN 表A 别名B ON 条件两个表A说明是同一张表&#xff0c;但是别名不同 案例…

【pyinstaller打包记录】程序使用多进程,打包后,程序陷入死循环

简介 PyInstaller 是一个用于将 Python 程序打包成可执行文件&#xff08;可执行程序&#xff09;的工具。它能够将 Python 代码和其相关的依赖项&#xff08;包括 Python 解释器、依赖的模块、库文件等&#xff09;打包成一个独立的可执行文件&#xff0c;方便在不同环境中运行…

websocket在java中的使用教程

本文从websocket服务端和客户端两个方面简单介绍下websocket在java中的使用。 一、websocket服务端&#xff08;WebSocketServer&#xff09; websocket服务端是以本机作为消息的接受端&#xff0c;用于接受客户端websocket发送过来的消息&#xff0c;并可以通过客户端的webs…

Cesium 自定义Primitive - 圆

一、创作思路 1、创建一个自定义CustomPrimitive 2、然后根据两个点&#xff0c;生成圆 3、方便后期绘制圆 二、实现代码 1、在vue的包中加入turf. npm install turf/turf 1、创建一个CustomCirclePrimitive类,并加入更新的代码 export default class CustomCirclePrimitive …

2024年软考重大改革

中国计算机技术职业资格网 考试日期 考试级别 考试资格名称 5月25日至28日 高级 系统分析师 系统架构设计师 信息系统项目管理师 中级 软件设计师 网络工程师 软件评测师 电子商务设计师 嵌入式系统设计师 数据库系统工程师 信息系统管理工程师 初级 程序员 …

lightGBM的学习整理

执行步骤 1、初始化&#xff0c;选择一个初始模型&#xff0c;通常是一个常数&#xff0c;比如分类问题中内的类别概率的先验值&#xff0c;回归问题中的目标变量的平均值。 2、训练决策树&#xff0c;对于每一轮迭代&#xff0c;计算当前模型的梯度&#xff08;损失函数的负…

鸿蒙应用组件

基础组件 索引组件—AlphabetIndexer&#xff08;相当于安卓的seedbar&#xff09; 使用&#xff1a;AlphabetIndexer(value: {arrayValue: Array<string>, selected: number})空白填充组件—Blank&#xff08;占位使用&#xff0c;当父组件为Row/Column/Flex时生效&am…

chrome插件extensions获取所有窗口tab页和windows页

获取windows页&#xff1a;https://developer.chrome.com/docs/extensions/reference/api/windows?hlzh-cn 获取所有tabs页&#xff1a;https://developer.chrome.com/docs/extensions/reference/api/tabs?hlzh-cnchrome.tabshttps://developer.chrome.com/docs/extensions/…

4G/5G执法记录仪、智能安全帽走国标GB28181接入海康、宇视等大平台,也可走平台与平台对接,以下级平台级联到上级大平台

AIoT万物智联&#xff0c;智能安全帽生产厂家&#xff0c;执法记录仪生产厂家&#xff0c;智能安全帽、智能头盔、头盔记录仪、执法记录仪、智能视频分析/边缘计算AI盒子、车载DVR/NVR、布控球、智能眼镜、智能手电、无人机4G补传系统等统一接入大型融合通信可视指挥调度平台VM…

GO GMP

GMP 为了解决 Go 早期多线程 M 对应多协程 G 调度器的全局锁、中心化状态带来的锁竞争导致的性能下降等问题&#xff0c;Go 开发者引入了处理器 P 结构&#xff0c;形成了当前经典的 GMP 调度模型。 GMP 模型是 Go 语言调度器采用的并发编程模型它包含三个重要的组件&#xf…

独立站营销攻略:塑造品牌,掌控数据,应对挑战

随着出海热的加剧&#xff0c;独立站已成为品牌拓展海外市场的重要组成部分。独立站不仅能够帮助企业建立品牌形象&#xff0c;扩大市场份额&#xff0c;还能够提高用户忠诚度和品牌认知度。然而&#xff0c;独立站在推广营销方面也有着诸多挑战&#xff0c;如流量获取、用户粘…

测试需求平台10-DBUtils 优化数据连接与 SQL Limit 实现分页

✍此系列为整理分享已完结入门搭建《TPM提测平台》系列的迭代版&#xff0c;拥抱Vue3.0将前端框架替换成字节最新开源的arco.design&#xff0c;其中约60%重构和20%新增内容&#xff0c;定位为从 0-1手把手实现简单的测试平台开发教程&#xff0c;内容将囊括基础、扩展和实战&a…