STL——deque详解

目录

💡基本概念

💡deque构造函数

💡deque赋值操作

💡deque大小

💡deque插入和删除

💡deque数据存取

💡deque排序


💡基本概念

功能:

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

deque与vector区别:

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

 

 

 

 

deque内部工作原理:

deque内部有个中控器,维护每段缓冲区中的内容,缓冲区中存放真实数据中控器维护的是每个缓冲区的地址,使得使用deque时像一片连续的内存空间 

 

  • deque容器的代器也是支持随机访问的

💡deque构造函数

功能描述:

  •  deque容器构造

函数原型:

  • deque<T> degT;        //默认构造形式
  • deque(beg,end);     //构造函数将[begend)区间中的元素拷贝给本身
  • deque(n, elem);      //构造函数将n个elem拷贝给本身
  • deque(const deque &deq);      //拷贝构造函数

 

	deque<int>d1;
	for (int i = 0; i < 10; i++)
	{
		d1.push_back(i);
	}
	Print(d1);
	deque<int>d2(d1.begin(), d1.end());
	Print(d2);
	deque<int>d3(10, 100);
	Print(d3);
	deque<int>d4(d3);
	Print(d4);

💡deque赋值操作

功能描述:

  • 给deque容器进行赋值

函数原型:

  • deque&roperator=(const deque &deq);      //重载等号操作符
  • assign(beg, end);      //将[beg,end)区间中的数据拷贝赋值给本身
  • assign(n, elem);       //将n个elem拷贝赋值给本身。
	deque<int>d1;
	for (int i = 0; i < 10; i++)
	{
		d1.push_back(i);
	}
	Print(d1);
	deque<int>d2;
	d2 = d1;
	Print(d2);
	deque<int>d3;
	d3.assign(d1.begin(), d1.end());
	Print(d3);
	deque<int>d4;
	d4.assign(10, 100);
	Print(d4);
	d4.assign(100, 1000);
	Print(d4);

💡deque大小

功能描述:

  • 对deque容器的大小进行操作

函数原型:

  • deque.empty();       //判断容器是否为空
  • deque.size();          //返回容器中元素的个数
  • deque.resize(num);        //重新指定容器的长度为num,若容器变长,则以默认值填充新位置                                            //如果容器变短,则末尾超出容器长度的元素被删除。
  • deque.resize(num, elem);//重新指定容器的长度为num,若容器变长,则以elem值填充新位置                                       //如果容器变短,则末尾超出容器长度的元素被删除。

注意:deque容器没有容量的限制,这点和vector容器有差别,这是因为deque内部有一个中控器,维护每段缓冲区中的内容,缓冲区中存放真实数据中控器维护的是每个缓冲区的地址

deque<int>d1;
	for (int i = 0; i < 10; i++)
	{
		d1.push_back(i);
	}
	Print(d1);
	if (d1.empty())
	{
		cout << "d1为空" << endl;
	}
	else
	{
		cout << "d1不为空" << endl;
		cout << "size=" << d1.size() << endl;
	}

	//重新指定大小
	//d1.resize(15);
	//d1.resize(15,1);
	d1.resize(5);
	Print(d1);

💡deque插入和删除

功能描述:

  • 向deque容器中插入和删除数据

函数原型:

两端插入操作:

  • push_back(elem);         //在容器尾部添加一个数据
  • push_front(elem);         //在容器头部插入一个数据
  • pop_back();               //删除容器最后一个数据
  • pop_front();             //删除容器第一个数据

指定位置操作:

  • insert(pos,elem);          //在pos位置插入一个elem元素的拷贝,返回新数据的位置。
  • insert(pos,n,elem);          //在pos位置插入n个elem数据,无返回值
  • insert(pos,beg,end);         //在pos位置插入[beg,end)区间的数据,无返回值。
  • clear();                     //清空容器的所有数据
  • erase(beg,end);                 //删除[begend)区间的数据,返回下一个数据的位置
  • erase(pos);                  //删除pos位置的数据,返回下一个数据的位置
	deque<int>d1;
	//尾插
	for (int i = 0; i < 10; i++)
	{
		d1.push_back(i);
	}
	Print(d1);
	//头插
	d1.push_front(100);
	d1.push_front(200);
	Print(d1);
	//尾删
	d1.pop_back();
	cout << "尾删:";
	Print(d1);
	//头删
	d1.pop_front();
	cout << "头删:";
	Print(d1);


	//指定位置插入删除
	deque<int>d2;
	//尾插
	for (int i = 0; i < 10; i++)
	{
		d2.push_back(i);
	}
	Print(d2);

	//insert
	d2.insert(d2.begin(), 1000);
	Print(d2);
	d2.insert(d2.begin(),2, -1000);
	Print(d2);

	//按照区间进行插入
	deque<int>d3;
	d3.push_back(1);
	d3.push_back(2);
	d3.push_back(3);
	d2.insert(d2.begin(), d3.begin(), d3.end());
	Print(d2);

	//删除
	d2.erase(d2.begin());//删除1
	d2.erase(d2.begin()+1);//删除3
	Print(d2);
	d2.erase(d2.begin(), d2.end()-1);
	Print(d2);
	d2.clear();
	Print(d2);

💡deque数据存取

功能描述:

  • 对deque 中的数据的存取操作

函数原型:

  • at(int idx);        //返回索引idx所指的数据
  • operator[];         //返回索引idx所指的数据
  • front();               //返回容器中第一个数据元素
  • back();               //返回容器中最后一个数据元素
	deque<int>d1;
	for (int i = 0; i < 10; i++)
	{
		d1.push_back(i);
	}
	Print(d1);
	//通过[]访问
	for (int i = 0; i < d1.size(); i++)
	{
		cout << d1[i] << " ";
	}
	cout << endl;
	//at访问
	for (int i = 0; i < d1.size(); i++)
	{
		cout << d1.at(i) << " ";
	}
	cout << endl;

	//访问头尾元素
	cout << "头:" << d1.front() << endl;
	cout << "尾:" << d1.back() << endl;

 

💡deque排序

功能描述:

  • 利用算法实现对deque容器进行排序

算法:

  • sort(iterator beg,iterator end)        //对beg和end区间内元素进行排序                                                                                          (包含在头文件<algorithm>中)
#include<algorithm>
int main()
{
	deque<int>d;
	d.push_back(10);
	d.push_back(0);
	d.push_back(100);
	d.push_back(5);
	d.push_back(36);
	d.push_back(4);
	Print(d);
	sort(d.begin(), d.end());
	Print(d);
	return 0;
}

注:

对于支持随机访问的迭代器的容器,都可以利用sort算法直接对其进行排序

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

VmWare虚拟机的安装

VmWare官方最新版下载地址 vmware官方下载地址 安装流程 安装成功验证 安装完成之后&#xff0c;打开网络中心&#xff0c;一定要确认这里多出两个网络连接&#xff0c;才证明Vmware已经安装成功

Kali Linux——获取root权限

目录 一、设置root密码 【操作命令】 【操作实例】 二、临时获取root权限 【操作命令】 【操作实例】 三、提升用户到root 1、获取root权限 2、进入/etc/passwd 3、查看root账号ID 4、找到需要修改的用户 5、输入i&#xff0c;进入编辑模式 6、把用户的ID改成跟r…

【好书推荐-第二期】《实战AI大模型 》:带你走进大模型GPTs、AIGC的世界(李开复、周鸿祎、颜水成倾力推荐)

&#x1f60e; 作者介绍&#xff1a;我是程序员洲洲&#xff0c;一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主、前后端开发、人工智能研究生。公粽号&#xff1a;程序员洲洲。 &#x1f388; 本文专栏&#xff1a;本文…

数据结构c语言版:顺序表

顺序表的定义 顺序表是一种线性数据结构&#xff0c;它由一组连续的存储单元组成&#xff0c;用来存储具有相同数据类型的元素。顺序表中的元素按照逻辑顺序依次存放&#xff0c;并且可以通过索引来访问和修改元素。 顺序表的实现方式 两种&#xff1a;静态顺序表和动态顺序表。…

华为mstp、vrrp、ospf、isis、bgp等综合一起排错

最终实现左边私网和右边私网全部ping通 SW1 vlan batch 12 34 stp region-configuration //mstp配置 region-name test instance 12 vlan 12 instance 34 vlan 34 active region-configuration interface GigabitEthernet0/0/3 port link-type trunk port trunk allow-pass …

基于 Python+Neo4j+医药数据,构建了一个知识图谱的自动问答系统

知识图谱是目前自然语言处理的一个热门方向。目前知识图谱在各个领域全面开花&#xff0c;如教育、医疗、司法、金融等。 本项目立足医药领域&#xff0c;以垂直型医药网站为数据来源&#xff0c;以疾病为核心&#xff0c;构建起一个包含7类规模为4.4万的知识实体&#xff0c;…

Apifox使用外部文件完成接口预处理

pm.executeAsync(filePath, args, options) filePath string 外部程序路径 args string[] 参数。调用 jar 包中的指定方法时&#xff0c;会使用 JSON.stringify 进行转换。除此之外非 >string 类型会进行隐式类型转换自动转换为 string 类型。 options Object command str…

数据结构期末模拟试卷

一、判断题 1.关键路径是AOE网中从源点到汇点的最短路径。&#xff08;F&#xff09; 在AOE网中&#xff0c;从源点到汇点最长的路径称为关键路径&#xff0c;在关键路径上的活动称为关键活动 2. 二叉排序树的查找效率和二叉排序树的髙度有关。&#xff08;T&#xff09; 最好…

【ARM 处理器】程序存储详解

本篇文章主要介绍ARM处理器&#xff0c;Code, RO-data,RW-data,ZI-data 知识以及程序存储情况 目录 1. 专业词汇2. 程序存储3. 程序空间计算 1. 专业词汇 Code &#xff1a; 代码区&#xff0c;存储在 ROM 区域RO-data&#xff1a;Read Only data&#xff0c;即只读数据域&…

TIA Portal 各版本安装指南

TIA Portal下载链接 https://pan.baidu.com/s/1Jat53vGz1rXfLm7kTldz-Q?pwd0531 1.鼠标右击【TIA portal V19 (64bit)】压缩包&#xff08;先点击“显示更多选项”&#xff09;选择【解压到 TIA portal V19 (64bit)】。 2.打开解压后的文件夹&#xff0c;鼠标右击【NoRestart…

windows 部署zlm

安装 双击下面的文件&#xff0c;进行安装 查看服务是否安装成功 在任务栏右键&#xff0c;选择任务管理器 选择服务&#xff0c;打开服务 显示正在运行 查看推流密钥

应用层

title: 应用层 date: 2023-12-20 21:03:48 tags: 知识总结 categories: 计算机网络 应用层&#xff1a;负责最直观的应用请求的封装、发起 一、域名系统DNS 连接在互联网上的主机不仅有IP地址&#xff0c;还有便于用户记忆的主机名字。域名系统DNS能够把互联网上的主机的名字…

软件测试作业‖若依系统的自动化+性能

以若依系统或者任意系统作为案例&#xff0c;题目:以某一 web系统为测试对象&#xff0c;完成以下文档的编写: (1)产品规格说明书(SPEC) 要求:功能完整(完成产品需求70%以上)、UI优良(每个页 面均有字段约束和合理的出错提示)、流程完整(一一对应功能)、流程合理(处理逻辑非…

C++笔记之cout高亮输出以及纯C++实现一个彩色时钟

C笔记之cout高亮输出以及纯C实现一个彩色时钟 code review! 文章目录 C\笔记之cout高亮输出以及纯C\实现一个彩色时钟一.cout高亮输出1.1.运行1.2.代码一1.3.代码二1.4.重置终端的文本格式到默认设置说明 二.纯C\实现一个彩色时钟2.1.运行2.2.main.cc2.3.cout带颜色打印输出技…

用通俗易懂的方式讲解:万字长文带你入门大模型

告别2023&#xff0c;迎接2024。大模型技术已成为业界关注焦点&#xff0c;你是否也渴望掌握这一领域却又不知从何学起&#xff1f; 本篇文章将特别针对入门新手&#xff0c;以浅显易懂的方式梳理大模型的发展历程、核心网络结构以及数据微调等关键技术。 如果你在阅读中收获…

常用Python自动化测试框架有哪些?

随着技术的进步和自动化技术的出现&#xff0c;市面上出现了一些自动化测试框架。只需要进行一些适用性和效率参数的调整&#xff0c;这些自动化测试框架就能够开箱即用&#xff0c;大大节省了测试时间。而且由于这些框架被广泛使用&#xff0c;他们具有很好的健壮性&#xff0…

纳尼??Rabbitmq居然被一个逗号给坑了??

转载说明&#xff1a;如果您喜欢这篇文章并打算转载它&#xff0c;请私信作者取得授权。感谢您喜爱本文&#xff0c;请文明转载&#xff0c;谢谢。 前言 这个问题发生在部署一套新的环境。搭建一个单节点的Rabbitmq&#xff0c;按照小伙伴写的部署文档搭建的。其中搭建步骤和我…

OpenMMlab导出CenterNet模型并用onnxruntime和tensorrt推理

导出onnx文件 直接使用脚本 import torch import torch.nn.functional as F from mmdet.apis import init_detectorconfig_file ./configs/centernet/centernet_r18_8xb16-crop512-140e_coco.py checkpoint_file ../checkpoints/centernet_resnet18_140e_coco_20210705_093…

Zoho SalesIQ:提高品牌在社交媒体上参与度的实用指南

在当今快节奏的数字世界中&#xff0c;品牌参与度变得比以往任何时候都更加重要。社交媒体在企业与客户互动方面发挥着至关重要的作用&#xff0c;了解如何很好地利用社交媒体来增强品牌参与度至关重要。 正如我们在之前的博客中所了解到的&#xff0c;品牌参与是指在品牌与其…

【计算机网络】网络基础--协议/网络协议/网络传输流程/地址管理

文章目录 一、计算机网络背景二、协议1.协议是什么2.为什么要有协议 三、网络协议1.为什么要进行协议分层2.OSI七层模型3.TCP/IP五层(或四层)模型 四、网络传输基本流程1.协议报头2.局域网3.数据包封装和分用4.网络传输流程图 五、网络中的地址管理1.认识IP地址2.认识MAC地址3.…