第九层(4):STL之duque类

news2024/11/27 4:00:23

文章目录

  • 前情回顾
  • deque类
    • deque类的功能
    • deque和vector的区别
      • deque容器的内部图
    • deque类内的构造函数
    • deque类内的赋值操作
    • deque类内的大小操作
    • deque类内的插入操作
    • deque类内的删除操作
    • deque类内的单个访问
  • 下一座石碑

🎉welcome🎉
✒️博主介绍:一名大一的智能制造专业学生,在学习C/C++的路上会越走越远,后面不定期更新有关C/C++语法,数据结构,算法,Linux,ue5使用,制作游戏的心得,和大家一起共同成长。
✈️C++专栏:C++爬塔日记
😘博客制作不易,👍点赞+⭐收藏+➕关注

前情回顾

上一座石碑中,记载了vector类的使用,同时倒下之后还是石碑,也印证了我的猜想…

  • 🚄上章地址:第九层(3):STL之vector类

deque类

deque类的功能

  • deque容器与vector容器本质是十分相似的,但是不一样的是,deque是双端数组,它可以在双端都进行插入和删除的操作

deque和vector的区别

  • vector对于头部的插入和删除的效率很低,数据量越大的时候,效率越低,因为vector是单端数组,只能对于尾部进行插入和删除的操作,如果使用迭代器向头部插入,后面的数据拷贝到新空间也会浪费时间
  • deque相对vector而言,对于头部的插入和删除速度快,但是vector访问元素的速度比deque快,和两者的内部构造相关

deque容器的内部图

在这里插入图片描述

  • deque内部是有个中控器的,中控器中有节点,这个节点维护着它对应的缓冲区内容,缓冲区内放着的就是真实的数据,而这一个个节点维护的就是它对应的缓冲区地址,访问第一个节点之后,就访问第二个节点的地址,使得看起来是一片连续的空间
  • deque的迭代器也是一个可以随机访问的迭代器

deque类内的构造函数

  • deque的构造函数也有默认和有参这几种
deque< T >;//默认构造形式
deque(beg,end);//将迭代器deg到end之间的中素拷贝给本身
deque(int n ,T elem);//将n个elem拷贝给本身
deque(const deque &d);//拷贝构造函数,可以d的数据拷贝到本身

使用:

#include<deque>
#include<iostream>
using namespace std;

void print(deque<int>& d)
{
	for (deque<int>::iterator b = d.begin(); b < d.end(); b++)
	{
		cout << *b << " ";
	}
	cout << endl;
}
void test1()
{
	deque<int> d;
	for (int i = 0; i < 10; i++)
	{
		d.push_back(i);
	}
	print(d);
	deque<int> d1(d.begin(), d.end());
	print(d1);
	deque<int> d2(10, 10);
	print(d2);
	deque<int> d3(d2);
	print(d3);
}
int main()
{
	test1();
	return 0;
}

在这里插入图片描述

deque类内的赋值操作

  • deque的赋值与vector的赋值时一样的
deque& operator=(const deque &d);//操作符重载,将d的数据拷贝到本身
assign(beg,end);//将迭代器deg到end之间的中素拷贝赋值给本身
assign(int n.T elem);//将n个elem赋值给本身

使用:

#include<deque>
#include<iostream>
using namespace std;

void print(deque<int>& d)
{
	for (deque<int>::iterator b = d.begin(); b < d.end(); b++)
	{
		cout << *b << " ";
	}
	cout << endl;
}
void test1()
{
	deque<int> d;
	for (int i = 0; i < 10; i++)
	{
		d.push_back(i);
	}
	print(d);
	deque<int> d1;
	d1 = d;
	print(d1);
	deque<int> d2;
	d2.assign(d1.begin(), d1.end());
	print(d2);
	deque<int> d3;
	d3.assign(10, 10);
	print(d3);
}
int main()
{
	test1();
	return 0;
}

在这里插入图片描述

deque类内的大小操作

  • deque的本质是类似数组的东西,所以是拥有大小的,但是因为内部构造特殊,所以是没有容量的概念的
deque.empty();//判断容器内是否为空,为空返回真,不为空返回假
deque.size();//返回容器当前的元素个数
deque.resize(size_t num);//可以重新指定容器的容量,容量为num,若容器变长,则变长的部分全部补0,若变短,则将超出的部分全部删除
deque.resize(size_t num, T elem);可以重新指定容器的容量,容量为num,若容器变长,则变长的部分全部补elem,若变短,则将超出的部分全部删除

使用:

#include<deque>
#include<iostream>
using namespace std;

void print(deque<int>& d)
{
	for (deque<int>::iterator b = d.begin(); b < d.end(); b++)
	{
		cout << *b << " ";
	}
	cout << endl;
}
void test1()
{
	deque<int> d;
	if (d.empty())
	{
		cout << "d为空" << endl;
	}
	for (int i = 0; i < 10; ++i)
	{
		d.push_back(i);
	}
	cout<<d.size()<<endl;
	d.resize(15);
	print(d);
	d.resize(20, 10);
	print(d);
}
int main()
{
	test1();
	return 0;
}

在这里插入图片描述

deque类内的插入操作

  • deque的插入比vector的操作就多了点,可以从头部插入
push_back(T elem);//在容器尾部添加一个数据
push_front(T elem);//在容器头部插入一个数据
insert(pos,T elem);//在迭代器pos的位置插入elem元素
insert(pos,size_t n,T elem);//在迭代器pos的位置插入n个elem元素
insert(pos,beg,end);//在迭代器pos的位置插入迭代器beg到end的数据

使用:

#include<deque>
#include<iostream>
using namespace std;

void print(deque<int>& d)
{
	for (deque<int>::iterator b = d.begin(); b < d.end(); b++)
	{
		cout << *b << " ";
	}
	cout << endl;
}
void test1()
{
	deque<int> d;
	d.push_back(1);
	print(d);
	d.push_front(0);
	print(d);
	d.insert(d.begin(), 1);
	print(d);
	d.insert(d.end(), 3, 4);
	print(d);
	deque<int> d1;
	d1.insert(d1.begin(), d.begin(), d.end());
	print(d1);
}
int main()
{
	test1();
	return 0;
}

在这里插入图片描述

deque类内的删除操作

  • 同样对比vector多了头端删除
pop_back();//删除容器中最后一个元素
pop_front();//删除容器中第一个元素
clear();//删除容器中所有数据
erase(beg,end);//删除迭代器deg到end之间的所有数据
erase(pos);//删除迭代器pos位置的数据

使用:

#include<deque>
#include<iostream>
using namespace std;

void print(deque<int>& d)
{
	for (deque<int>::iterator b = d.begin(); b < d.end(); b++)
	{
		cout << *b << " ";
	}
	cout << endl;
}
void test1()
{
	deque<int> d;
	for (int i = 0; i < 10; ++i)
	{
		d.push_back(i);
	}
	print(d);
	d.pop_back();
	print(d);
	d.pop_front();
	print(d);
	d.erase(d.begin());
	print(d);
	deque<int>::iterator b = d.begin();
	b++;
	d.erase(b,d.end());
	print(d);
	d.clear();
	print(d);
}
int main()
{
	test1();
	return 0;
}

在这里插入图片描述

deque类内的单个访问

  • 与vector一样
at(int pos);//访问下标为pos的元素
operator[];//操作符重载
front();//返回容器中第一个数据元素
back();//返回容器中最后一个数据元素

使用:

#include<vector>
#include<iostream>
using namespace std;

void test1()
{
	deque<int> d;
	for (int i = 0; i < 10; i++)
	{
		d.push_back(i);
	}
	cout << d.at(5) << endl;
	cout << d[4] << endl;
	cout << d.front() << endl;
	cout << d.back() << endl;
}
int main()
{
	test1();
	return 0;
}

在这里插入图片描述

下一座石碑

  • 面前的石碑倒下了,透露出下一个石碑…

😘预知后事如何,关注新专栏,和我一起征服C++这座巨塔
🚀专栏:C++爬塔日记
🙉都看到这里了,留下你们的👍点赞+⭐收藏+📋评论吧🙉

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

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

相关文章

设计模式 - 创建型模式_原型模式

文章目录创建型模式概述Case场景模拟⼯程Bad ImplBetter Impl &#xff08;原型模式重构代码&#xff09;创建型模式 创建型模式提供创建对象的机制&#xff0c; 能够提升已有代码的灵活性和可复⽤性。 类型实现要点工厂方法定义⼀个创建对象的接⼝&#xff0c;让其⼦类⾃⼰决…

AcWing蓝桥杯AB组辅导课08、数论

文章目录前言一、数论例题例题1&#xff1a;AcWing 1246. 等差数列&#xff08;最大公约数&#xff0c;第十届蓝桥杯省赛CB第7题&#xff09;分析题解&#xff1a;最大公约数例题2&#xff1a;AcWing 1295. X的因子链&#xff08;算数基本定理、欧拉筛选&#xff0c;多重集合排…

打工人必知必会(四)——股票期权属于劳动争议吗

目录 参考 一、核心概览 二、 注意 三、更多案例 参考 案例评析:股票期权纠纷是否属于劳动争议 股票期权&#xff08;限制性股票&#xff09;相关劳动争议问题 北上广深杭案例 一、核心概览 二、 注意 结合双方股权激励协议的签署背景、目的等因素来综合考量并作出相对准…

【数据结构】8.1 排序概述

文章目录排序的基本概念排序方法的分类存储结构排序的基本概念 什么是排序&#xff1f; 排序&#xff1a;将一组杂乱无章的数据按照一定规律顺次排列起来。 即&#xff0c;讲无序序列排成一个有序序列&#xff08;有小到大或由大到小&#xff09;的运算。 如果参加排序的数据…

MicroPython开发ESP8266——环境搭建

MicroPython开发ESP8266——环境搭建0.前言一、固件烧写1.使用乐鑫官方的烧写工具2.使用python中的esptool工具烧写3.使用uPyCraft烧写4.测试二、IDE工具安装1.windows环境搭建2.Linux环境搭建3.测试1&#xff09;软件设置2&#xff09;测试程序3&#xff09;烧录0.前言 最近刷…

NLP 语种检测 API 数据接口

NLP 语种检测 API 数据接口 180 语言检测&#xff0c;语种全称与缩写&#xff0c;返回置信度。 1. 产品功能 基于 NLP 分析文本的语种支持 180 多语种检测&#xff1b;语种缩写遵循 ISO 639-1 标准&#xff1b;包含检测到的语种置信度&#xff1b;毫秒级响应性能&#xff1b;…

Java 代码ccflow 代码分析

流程属性目录概述需求&#xff1a;设计思路实现思路分析1。代码流程参考资料和推荐阅读Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,make a better result,wait for change,challenge Survive. ha…

Linux中详解编译原理每一步

引言&#xff1a; 时间过的飞快&#xff0c;可以看出我们已经开始学习Linux了&#xff0c;但是我们学习Linux过程中&#xff0c;依然会涉及到很多的以前的知识&#xff0c;比如编译原理&#xff0c;我们的代码如何从一个源文件逐步变成一个可执行文件&#xff0c;当初我记得我…

流批一体计算引擎-8-[Flink]的Table API连接器

参考官方文档Table API连接器 1 Table API连接器概述 Flink的Table API和SQL程序可以连接到其他外部系统&#xff0c;用于读取和写入批处理表和流式表。source表提供对存储在外部系统&#xff08;如数据库、键值存储、消息队列或文件系统&#xff09;中的数据的访问。sink表将…

Sentienl学习笔记

PS&#xff1a;本文为作者学习黑马程序员Springcould视频笔记实际技术参考价值不大&#xff0c;文章将持续更新。 文章目录一. 什么是Sentienl1. 介绍2. 与Hystrix对比3. 主要特性二. Sentienl安装配置1. 下载安装包2. 启动三. Sentienl的使用1. Sentienl的整合2. 簇点链路四. …

每日学术速递1.27

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 前沿推介&#xff1a; ICLR 2023 ICLR 全称为国际学习表征会议&#xff08;International Conference on Learning Representations&#xff09;&#xff0c;今年将举办的是第 11 届&#xff0c;预计将于 5 月 1 日至 5 …

Redis实现附近商铺 | 黑马点评

一、GEO数据结构 1、入门 GEO是Geolocation的缩写&#xff0c;代表地理坐标。redis3.2中加入对GEO的支持&#xff0c;允许存储地理坐标信息&#xff0c;帮助我们根据经纬度来检索数据。 常见命令&#xff1a; GEOADD&#xff1a;添加一个地理空间信息&#xff0c;包含&…

springcloud3 Sentinel的服务熔断操作

一 服务熔断 1.1 服务熔断 Sentinel熔断降级会在调用链路中某个资源出现不稳定状态时&#xff08;调用超时或者异常比例升高&#xff09;&#xff0c;对这个资源的调用进行限制&#xff0c;让请求快速失败&#xff0c;避免影响到其他资源进而导致级联错误。 当资源被降级后&…

07_linux中断控制

裸机开发要点 通用中断控制器(GIC) 中断类型、硬件中断号、分发器和cpu接口单元 中断向量表 一级查表、二级查表 中断处理流程 进入irq模式、保护现场、获取硬件中断编号、执行中断处理函数、还原现场 设备树构造 分为 gic中断控制器设备树节点 其他外设中断控制器节点 需要…

大数据相关组件

一、 HDFSHDFS是hadoop的核心组件&#xff0c;HDFS上的文件被分成块进行存储&#xff0c;默认块的大小是64M&#xff0c;块是文件存储处理的逻辑单元。HDFS是Master和Slave的结构。分NameNode、SecondaryNameNode、DataNode这几个角色。NameNode&#xff1a;是Master节点&#…

springcloud3 Sentinel的搭建以及案例操作

一 sentinel的概念 1.1 sentinel Sentinel是分布式系统流量控制的哨兵&#xff0c;阿里开源的一套服务容错的综合性解决方案。 主要用来处理&#xff1a; 服务降级 服务熔断 超时处理 流量控制 sentinel 的使用可以分为两个部分: 核心库&#xff08;Java 客户端&#…

基于nodejs+vue的留学服务管理平台的设计与开发

目 录 摘 要 I Abstract I 第一章 绪论 1 1.1系统开发的背景 1 1.2系统开发的意义 1 1.3本文研究内容 2 第二章 系统开发技术 3 第三章 系统分析 6 3.1用户需求分析 6 3.1.1 老师用户 6 3.1.2 学生用户 6 3.1.3 管理员用户 6 3.2 系统…

6--总线

文章目录一.总线概述&#xff08;一&#xff09;总线特性&#xff08;二&#xff09;总线分类1.按功能分/按连接的部件分&#xff08;1&#xff09;片内总线/CPU内部总线&#xff08;2&#xff09;系统总线&#xff08;3&#xff09;通信总线/外部总线2.按数据传输格式分&#…

7、关系运算符与关系表达式

目录 一、关系运算符 二、关系表达式 三、优先级与结合性 一、关系运算符 关系运算符包括大于、大于等于、小于、小于等于、等于和不等于 注意&#xff1a;符号“>”&#xff08;大于等于&#xff09;与“<”&#xff08;小于等于&#xff09;的意思分别是大于或等于…

向QAbstractItemView子类如:QTreeView、QTableView等子项单元格插入窗体小部件的功能实现(第3种方法)

1.前言工作中经常会遇到这样的需求&#xff1a;向QAbstractItemView子类如QTreeView、QTableView单元格插入窗体小部件&#xff0c;如&#xff1a;进度条、按钮、单行编辑框等。下面链接的系列博文就是讲解如何实现该功能的。《向QAbstractItemView子类如:QTreeView、QTableVie…