STL——deque容器【双端动态数组】

deque容器的基本概念:

功能:双端数组,可以对头端进行插入删除操作

deque与vector的区别:

  • vector队友头部的插入删除效率低,数据量越大,效率越低
  • deque相对而言,对头部的插入删除速度会比vector快
  • vector访问元素时的速度会比的deque快,这和两者内部实现有关

deque内部工作原理:

  • deque内部有个中控器,维护每段缓冲区的内容,缓冲区存放真实数据
  • 中控器维护的时每个缓冲区的地址,使得使用deque时像一片连续的内存空间 
  • deuqe的迭代器也支持随机访问

deque的构造函数:

函数原型:

  • deque<T> deqT:默认构造形式
  • deque(beg,end):构造函数将[beg,end)区间中的元素拷贝给本身
  • deque(n,elem):构造函数将n个elem拷贝给本身
  • deque(const deque &deq):拷贝构造函数
#include<bits/stdc++.h>
using namespace std;
void printdeque(const deque<int>&d){for(deque<int>::const_iterator it=d.begin();it!=d.end();it++){//*it=100; 容器里的数据不可以修改了 cout<<*it<<" ";} cout<<endl;
} 
void test01(){deque<int> d1;for(int i=0;i<10;i++){d1.push_back(i);}printdeque(d1);deque<int>d2(d1.begin(),d1.end());printdeque(d2);deque<int>d3(10,100);printdeque(d3);deque<int>d4(d3);printdeque(d4);
}
int main(){test01();return 0;
} 

deque赋值操作:

函数原型:

  • deque& operator=(const deque &dec):重载等号操作符

  • assign(beg,end):将[beg,end)区间中的数据拷贝赋值给本身【前闭后开区间】

  • assign(n,elem):将n个elem拷贝赋值给本身

#include<bits/stdc++.h>
using namespace std;
void printdeque(deque<int> &d){for(deque<int>::iterator it=d.begin();it!=d.end();it++){cout<<*it<<" ";}cout<<endl;
}
void test01(){deque<int>d1;for(int i=0;i<10;i++){d1.push_back(i);}printdeque(d1);//operator赋值 deque<int>d2;d2=d1;printdeque(d2);//assign方式deque<int>d3;d3.assign(d1.begin(),d1.end()); printdeque(d3);deque<int>d4(10,100);printdeque(d4);
}
int main(){test01();return 0;
}

deque大小操作:

功能描述:对deque容器的大小进行操作

函数原型:

  • deque.empty():判断容器是否为空

  • deque.size():返回容器中元素的个数

  • deque.resize():重新指定容器的长度为num,若容器变长,则以默认值填充新位置,若容器变短,则末尾超出容器长度的元素被删除

  • deque.resize(num,elem):重新指定容器的长度为num,若容器变长,则以elem填充新位置,若容器变短,则末尾超出容器长度的元素被删除

#include<bits/stdc++.h>
using namespace std;
void printdeque(deque<int>&d){for(deque<int>::iterator it=d.begin();it!=d.end();it++){cout<<*it<<" ";}cout<<endl;
}
void test01(){deque<int>d1;for(int i=0;i<10;i++){d1.push_back(i);}printdeque(d1);if(d1.empty()){cout<<"d1为空"<<endl;}else {cout<<"d1不为空"<<endl;cout<<"d1的大小为:"<<d1.size()<<endl;//deque没有容量的概念}//重新指定大小d1.resize(15); printdeque(d1);d1.resize(15,1);printdeque(d1);d1.resize(3);printdeque(d1);
}
int main(){test01();return 0; 
}

deque的插入和删除:

函数原型:

两端插入操作:

  • push_back(elem):在容器尾部添加一个数据

  • push_front(elem):在容器头部插入一个数据

  • pop_back():删除容器最后一个数据

  • pop_front():删除容器第一个数据

指定位置操作:

  • insert(pos,elem):在pos位置插入一个elem元素的拷贝,返回新数据的位置

  • insert(pos,n,elem):在pos位置插入n个elem数据,无返回值

  • isnert(pos,beg,end):在pos位置插入[beg,ebd)区间的数据,无返回值

  • clear():清空容器所有数据

  • erase(beg,end):删除[beg,end)区间的数据,返回下一个数据的位置

  • erase(pos):删除pos位置的数据,返回下一个数据的位置

#include<bits/stdc++.h>
using namespace std;
void printdeque(deque<int>d){for(deque<int>::iterator it=d.begin();it!=d.end();it++){cout<<*it<<" ";}cout<<endl;
}
//两端操作 
void test01(){deque<int>d1;//尾插 d1.push_back(10);d1.push_back(20);//头插d1.push_front(1);d1.push_front(2);printdeque(d1);//尾部删除d1.pop_back();printdeque(d1);//头部删除d1.pop_front();printdeque(d1); 
}
void test02(){deque<int>d1;//尾插 d1.push_back(10);d1.push_back(20);//头插d1.push_front(1);d1.push_front(2);printdeque(d1);//insert插入d1.insert(d1.begin(),100);printdeque(d1); //insert重载d1.insert(d1.begin(),2,1000);printdeque(d1); //按照区间进行插入deque<int>d2;d2.push_back(1);d2.push_back(2);d2.push_back(3);d1.insert(d1.begin(),d2.begin(),d2.end());printdeque(d1); }
//删除 
void test03(){deque<int>d1;d1.push_back(10);d1.push_back(20);d1.push_front(100);d1.push_front(200);deque<int>::iterator it=d1.begin();it++;d1.erase(it);printdeque(d1);//按照区间的方式删除d1.erase(d1.begin(),d1.end());//清空d1.clear(); printdeque(d1); 
} 
int main(){test01();test02();test03();return 0;
}

 deque的数据存取:

函数原型:

#include<bits/stdc++.h>
using namespace std;
//deque容器数据存取
void test01(){deque<int>d;d.push_back(10);d.push_back(20);d.push_back(30);d.push_front(100);d.push_front(200);d.push_front(300);//通过[]访问元素for(int i=0;i<d.size();i++){cout<<d[i]<<" ";} cout<<endl;//通过at方式访问元素for(int i=0;i<d.size();i++) {cout<<d.at(i)<<" ";}cout<<endl;//访问头尾元素 cout<<"第一个元素为:"<<d.front()<<endl;cout<<"最后一个元素为:"<<d.back()<<endl; 
} 
int main(){test01(); 	return 0;
}

deque的排序:

算法:

  • sort(iterator beg,iterator end):对bg和end区间内的元素进行排序

#include<bits/stdc++.h>
using namespace std;
void printdeque(deque<int>d){for(deque<int>::iterator it=d.begin();it!=d.end();it++){cout<<*it<<" ";}cout<<endl;
}
int cmp(int a,int b){return a>b;
} 
void test01(){deque<int> d;d.push_back(10);d.push_back(20);d.push_back(30);d.push_front(100);d.push_front(200);d.push_front(300);printdeque(d);//排序,默认升序排序 sort(d.begin(),d.end());printdeque(d); //降序排序sort(d.begin(),d.end(),cmp);printdeque(d);
}
int main(){test01();return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

面试官:SPA(单页应用)首屏加载速度慢怎么解决

一、什么是首屏加载 首屏时间&#xff08;First Contentful Paint&#xff09;&#xff0c;指的是浏览器从响应用户输入网址地址&#xff0c;到首屏内容渲染完成的时间&#xff0c;此时整个网页不一定要全部渲染完成&#xff0c;但需要展示当前视窗需要的内容 首屏加载可以说是…

喜报|才聚荣获“2024年度PMI(中国)注册教育机构杰出机构奖”!

5月10日&#xff0c;“2024PMI&#xff08;中国&#xff09;注册教育机构合作伙伴大会”隆重举行&#xff0c;才聚集团受邀参加此次盛会。 本次大会就项目管理职业生态、发展趋势等热门问题进行了深入探讨分析。 PMP认证自1999年引入中国&#xff0c;为国家培养了大量项目管理…

单细胞分析:多模态 reference mapping (2)

引言 本文[1]介绍了如何在Seurat软件中将查询数据集与经过注释的参考数据集进行匹配。我们展示了如何将来自不同个体的人类骨髓细胞&#xff08;Human BMNC&#xff09;的人类细胞图谱&#xff08;Human Cell Atlas&#xff09;数据集&#xff0c;有序地映射到一个统一的参考框…

总结 UDP 的报文结构和注意事项

UDP协议端格式 UDP报文主体分为两个部分:UDP报头(占8个字节)UDP数据/UDP载荷UPD报头:源端口号目的端口号包长度校验和 1.源端口号&#xff1a;一般是客户端程序程序请求时&#xff0c;由系统自动指定&#xff0c;端口号范围是0~65535&#xff0c; 0 ~ 1023为知名端口号——占16…

算法练习day7

四数相加II 代码随想录 0454.四数相加II 454. 四数相加 II - 力扣&#xff08;LeetCode&#xff09; &#xff08;用时&#xff1a;0.5小时&#xff09; 思路 本道题是需要在四个数组中&#xff0c;各找一个数&#xff0c;这些数加起来能够等于0&#xff0c;那么就是答案元…

slambook2,ch7编译问题

系统环境 ubuntu18&#xff0c;opencv就是默认和ros一起安装的版本,opencv3.2&#xff0c;sophus模板类和非模板类都安装了。 报错信息 主要的原因就是&#xff1a;里面的代码用的是模板类的sophus库&#xff0c;而我安装模板类sophus的时候没有像这篇博客一样Sophus库安装和…

璩静也是受害者

5月7日&#xff0c;“百度副总裁璩静称员工闹分手提离职秒批”话题登上了热搜。在短视频里&#xff0c;璩静是会连续出差50天的“公关人”&#xff0c;没有春节周末、没有假期&#xff0c;她会说“员工闹分手提离职我秒批&#xff0c;为什么要考虑员工的家庭”。有网友对其视频…

JWT生成RSA密钥文档

JWT生成RSA密钥文档 创建jwt文件夹 创建jwt文件夹 进入文件夹 进入jwt文件夹&#xff0c;输入cmd&#xff0c;如图 3、生成公钥私钥 keytool -genkeypair -alias pdm -keyalg RSA -keypass Gacrnd#123 -keystore pdm.jks -storepass Gacrnd#123 -alias&#xff1a;密钥的别名…

VMware虚拟机中ubuntu使用记录(8)—— 如何在Ubuntu18.04中安装运行非ROS版本的ORB_SLAM3跑官方数据集(全程手把手教学安装)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 ORB_SLAM3的介绍一、gitee下载ORB_SLAM3源码1. gitee导入gitHub仓库 二、安装支持C特性依赖三、安装Pangolin1. 安装Pangolin的依赖2. 下载编译 四、安装Eigen31.下…

ChatGPT未来可能应用于iPhone?

苹果接即将与OpenAI达成协议 ChatGPT未来应用于iPhone 前言 就在5月11日&#xff0c;苹果公司正与OpenAI进行深入讨论&#xff0c;计划在其最新的iOS操作系统中整合OpenAI的先进技术。这一举措是苹果公司在为其产品线融入更先进的人工智能功能所做努力的一部分。 目前情况双方…

全网最详细IOS系统APP上架教程(二)

上一篇讲解了IOS系统APP上架注册苹果开发者账号需要的材料、邓白氏编码的注册等&#xff0c;本文将继续讲解后续流程。 详细步骤 三、申请苹果开发者账号 在苹果手机上安装Apple Developer 打开Apple Developer&#xff0c;用之前注册好的Apple ID登录&#xff0c;输入姓名身…

收音机套件焊接和装调的总结

很早之前买了一个小收音机&#xff0c;今天翻出来焊接上。 还好&#xff0c;质量挺好的&#xff0c;电路板没有氧化。 一。静态电流 pcb上面留有ABCD四个测电流的位置。方便调试。 焊接后&#xff0c;V1电流偏大&#xff0c;如果电流过大&#xff0c;会导致R2的压降过大&am…

基于SpringBoot+Vue的笔记共享平台 免费获取源码

项目源码获取方式放在文章末尾处 项目技术 数据库&#xff1a;Mysql5.7/8.0 数据表&#xff1a;10张 开发语言&#xff1a;Java(jdk1.8) 开发工具&#xff1a;idea 前端技术&#xff1a;vue 后端技术&#xff1a;SpringBoot 功能简介 (有文档) 项目获取关键字&#…

机器人系统ros2-开发实践08-了解如何使用 tf2 来访问坐标帧转换(Python)

tf2 库允许你在 ROS 节点中查询两个帧之间的转换。这个查询可以是阻塞的&#xff0c;也可以是非阻塞的&#xff0c;取决于你的需求。下面是一个基本的 Python 示例&#xff0c;展示如何在 ROS 节点中使用 tf2 查询帧转换。 本教程假设您已完成tf2 静态广播器教程 (Python)和tf…

STM32(六):定时器PWM呼吸灯 (标准库函数)

前言 上一篇文章已经介绍了如何用STM32单片机中的TIMER定时器来控制LED灯的交替闪烁&#xff0c;实现了点灯的第五种方式。这篇文章我们来介绍一下如何用STM32单片机中的定时器的PWM波来实现LED的“呼吸”。 一、实验原理 关于定时器这边就不多加赘述&#xff0c;详细请看上…

selenium进行xhs图片爬虫:03获取一篇图文的图片

&#x1f4da;博客主页&#xff1a;knighthood2001 ✨公众号&#xff1a;认知up吧 &#xff08;目前正在带领大家一起提升认知&#xff0c;感兴趣可以来围观一下&#xff09; &#x1f383;知识星球&#xff1a;【认知up吧|成长|副业】介绍 ❤️感谢大家点赞&#x1f44d;&…

如何选择合适加密软件来保护信息资产|精选加密软件分析

五款加密软件对比分析&#xff0c;是一项复杂而必要的任务&#xff0c;旨在帮助用户选择最适合其需求的加密工具。在数字化时代&#xff0c;信息安全显得尤为重要&#xff0c;因此&#xff0c;对加密软件的评估与比较显得尤为关键。 首先&#xff0c;我们要考虑的是这些加密软件…

小程序分包

上传时主包不能过大&#xff0c;采用分包的方式&#xff0c;这里是taro框架 要访问的话

飞跨电容型的三电平(FC-NPC)逆变器simulink仿真模型

本人搭建了飞跨电容型的三电平逆变器simulink仿真模型&#xff0c;相较于二极管钳位型三电平逆变器而言&#xff0c;钳位二极管变为飞跨的电容。采用SPWM调制和均流均压控制&#xff0c;通过搭建仿真模型得到三电平波形。 三电平拓扑中的飞跨电容是指在电路的输出端使用电容来实…

代码随想录第五十天|最佳买卖股票时机含冷冻期、买卖股票的最佳时机含手续费

题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 最佳买卖股票时机含冷冻期与打家劫舍的题目有异曲同工之妙&#xff0c;主要是出现了天数的间隔&#xff0c;一次需要在买卖股票的最佳时机II 题目上做一点调整&#xff0c;代码如下&#xff1a; 如代码所示&…