C++ deque类成员函数介绍

news2024/11/20 14:19:48

目录

🤔deque模板介绍:

🤔deque特点:

🤔deque内存结构图解:

🤔deque各操作地址指向:

🤔 deque的成员函数:

deque构造函数:

🔍代码实例:

📖运行结果:

 deque赋值函数:

🔍实例:

📖运行结果:

 deque判断函数

📖运行结果:

 deque的删除和插入:

🔍代码示例:

📖运行结果:

 📖deque数据存取函数:

🔍代码实例:

📖运行结果:

🤔 结束!


🤔deque模板介绍:

            📖  deque是C++ STL中的一个双端队列模板,它支持在队列的两端进行元素的插入和删除操作。deque的全称是double-ended queue,即双向队列。deque的特点是可以高效地在队列的两端进行元素的插入删除操作,而且可以在任意位置进行元素的访问和修改操作。

🤔deque特点:

📖1.支持迭代器:可以用迭代器随机访问容器中的元素。

📖2.插入和删除:可以在队头和队尾进行自由的删除和插入,但是在中间插入或删除的时候效率比较慢,这是由于deque的内存结构决定的,我们会在下文进行解释。

📖3.内存管理:deque使用一段连续的存储空间,但是它可以使用多个缓冲区存储元素,每一个缓冲区的大小可以不一样。

📖4.在C++17之前的标准中,deque是不支持元素的拷贝移动操作的,这是因为他的元素存储在不同的缓冲区中,而不是连续存储的,拷贝和移动可能会导致内存布局的变化,从而破坏deque的数据结构,C++17之后就移除了这一特性。

🤔deque内存结构图解:

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

🤔deque各操作地址指向:

 这也是为什么我们区间赋值永远不包含end()的原因:end()指向的是最后一个元素的后一个位置!

🤔 deque的成员函数:

deque构造函数:

📖1.默认构造函数:deque<T> deqT;

deque<int>d1;

📖2.将[beg,end)区间的元素拷贝给自身:deque (beg,end);

deque<int>d2(d1.begin(), d1.end());

📖3.将n个ele拷贝给自身:deque(n,elem);

deque<int>d3(3, 8);

📖4.拷贝另一个容器给自身:deque(const deque &deq);

deque<int>d4(d3);

🔍代码实例:

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

void print(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);
	}
	cout << "默认构造:" << endl;
	print(d1);

	//区间构造
	deque<int>d2(d1.begin(), d1.end());
	cout << "区间构造:" << endl;
	print(d2);

	//n个elem构造
	deque<int>d3(3, 8);
	cout << "n个ele构造:" << endl;
	print(d3);

	//拷贝构造
	deque<int>d4(d3);
	cout << "拷贝构造:" << endl;
	print(d4);

}
int main()
{
	test01();

}

📖运行结果:

 deque赋值函数:

📖1.将n个ele赋值给自身:assign(n,ele);

deque<int>d1;
d1.assign(8, 10);

📖2.将[beg,end)的元素拷贝赋值给自身:assign(beg,end)

deque<int>d2;
d2.assign(d1.begin(), d1.end());

📖3.重载等号运算符:deque &operator=const deque &deq

deque<int>d3 = d1;

🔍实例:

#include<iostream>
using namespace std;
#include<deque>
void print(deque<int>& d)
{
	for (deque<int>::iterator it = d.begin(); it != d.end(); it++)
			{
				cout << *it << " ";
			}
			cout << endl;
}
void test01()
{
	//将n个elem元素赋值给自身
	deque<int>d1;
	d1.assign(8, 10);
	cout << "n个elem赋值结果为:";
	print(d1);

	//将beg,end中的数据赋值给自身
	deque<int>d2;
	d2.assign(d1.begin(), d1.end());
	cout << "区间赋值结果为:";
	print(d2);

	//重载等号运算符
	deque<int>d3 = d1;
	cout << "重载等号赋值结果为:";
	print(d3);
}
int main()
{
 test01();
}

📖运行结果:

 deque判断函数

📖1.判断容器是否为空:empty();

📖2.判断容器中元素个数:size();

📖3重新指定容器长度为num,如果容器变长,则变长部分用默认值填充新位置,如果容器变小就删除多出元素:resize(num);

📖4.重新指定容器的长度为num。若容器变长,就以ele值填充新位置,若容器变短,则超出的元素被删除:resize(num,elem);

#include<iostream>
using namespace std;
#include<deque>
void print(deque<int>& d)
{
	for (deque<int>::iterator it = d.begin(); it != d.end(); it++)
			{
				cout << *it << " ";
			}
			cout << endl;
}
void test01()
{
	//将n个elem元素赋值给自身
	deque<int>d1;
	d1.assign(8, 10);
	print(d1);

	cout << "d1容器是否为空(1为空 0为不空):" << d1.empty()<<endl;
	cout << "d1容器中元素的个数为:" << d1.size()<<endl;
	
	d1.resize(11);
	print(d1);
	d1.resize(4);
	print(d1);
}
int main()
{
 test01();
}

📖运行结果:

 deque的删除和插入:

两端插入
📖1.在尾部添加一个数据:push_back();
📖2.在容器头部添加一个数据:push_front();
📖3.删除容器中最后一个元素:pop_back();
📖4.删除容器中第一个数据:pop_front();

指定位置插入
📖1.  在pos位置插入一个ele元素,返回新数据的位置:  insert (pos,elem)
📖2. 在pos位置插入n个elem元素,无返回值:  insert(pos,n,elem)
📖3. 在pos位置插入[beg,end)区间的数据,无返回值:  insert(pos,beg,end)
📖4. 清空容器的所有数据:  clear() ;
📖5.  删除从beg到end的所有元素:  eares(beg,end);
📖6.删除pos位置的元素,返回下一个数据的位置:  eares pos

🔍代码示例:

#include<iostream>
using namespace std;
#include<deque>
void print(deque<int>& d)
{
	for (deque<int>::iterator it = d.begin(); it != d.end(); it++)
			{
				cout << *it << " ";
			}
			cout << endl;
}
void test01()
{
	deque<int>d(2,7 );
	deque<int>d1;
	d1.assign(8, 10);
	print(d1);


	d1.push_back(1);
	d1.push_front(2);
	cout << "插入后";
	print(d1);


	d1.pop_back();
	d1.pop_front();
	cout << "删除后";
	print(d1);


	d1.insert(d1.begin(), 8);
	print(d1);

	d1.insert(d1.begin(), 2, 9);
	print(d1);

	d1.insert(d1.begin(), d.begin(), d.end());
	print(d1);

	d1.erase(d1.begin());
	print(d1);

	d1.erase(d1.begin(), d1.end());
	print(d1);

	d.clear();
	cout << "d的元素为:";


}
int main()
{
 test01();
}

📖运行结果:

 📖deque数据存取函数:

📖1.获取容器中第dex+1个元素:at(int dex);
📖2.获取容器中第dex+1个元素:operator[dex];
📖3.获取容器中第一个元素:front();
📖4.获取容器中最后一个元素:back();

🔍代码实例:

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

void print(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);
	}
	print(d1);

	cout << d1.at(4)<<endl;
	cout << d1[5]<<endl;
	cout << d1.front()<<endl;
	cout << d1.back()<<endl;

}
int main()
{
	test01();

}

📖运行结果:

🤔 结束!

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

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

相关文章

C++ 常见集合算法

目录 &#x1f914;常见集合算法&#xff1a; &#x1f642;1.set_intersection 容器交集 代码示例&#xff1a; 运行结果&#xff1a; &#x1f642;2.set_union 容器并集 图解&#xff1a; 代码示例&#xff1a; 运行结果&#xff1a; &#x1f642; 3.set_differe…

高速缓存(cache)的原理: 了解计算机架构与性能优化

计基之存储器层次结构 Author&#xff1a; Once Day Date&#xff1a; 2023年5月9日 长路漫漫&#xff0c;而今才刚刚启程&#xff01; 本内容收集整理于《深入理解计算机系统》一书。 参看文档: 捋一捋Cache - 知乎 (zhihu.com)iCache和dCache一致性 - 知乎 (zhihu.com)C…

【SpringCloud——Elasticsearch(上)】

一、什么是Elasticsearch elasticsearch是一款非常强大的开源搜索引擎&#xff0c;可以帮助我们从海量数据中快速找到需要的内容。 二、倒排索引 1、正向索引 2、倒排索引 3、总结 三、ES和MySQL的区别 四、操作索引库 1、基于Kibana&#xff08;WEB界面&#xff09; 以下操作…

jvisualvm ssl远程连接JVM

jvisualvm 远程ssl连接 一、没认证的 JMX连接 (不安全) 这种方式&#xff0c;仅限于测试环境&#xff0c;可以这样操作。生产环境为了安全起见&#xff0c;还是要使用带认证的方式连接。 远程jar包服务 启动时 java -jar [jvm参数] xx.jar添加JVM参数 java -jar -Xmx512M -Xms2…

基于深度学习的高精度汽车自行车检测识别系统(PyTorch+Pyside6+模型)

摘要&#xff1a;基于深度学习的高精度汽车自行车检测识别系统可用于日常生活中检测与定位汽车自行车目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的汽车自行车目标检测识别&#xff0c;另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5目…

基于深度学习的高精度野生动物检测识别系统(PyTorch+Pyside6+YOLOv5模型)

摘要&#xff1a;基于深度学习的高精度野生动物检测&#xff08;水牛、犀牛、斑马和大象&#xff09;识别系统可用于日常生活中或野外来检测与定位野生动物目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的野生动物目标检测识别&#xff0c;另外支持结果可视…

Flutter问题记录 - TextField组件多行提示文本显示不全

文章目录 前言开发环境问题描述问题分析解决方案最后 前言 梳理Flutter项目的过程中发现还有一些遗留的TODO没处理&#xff0c;其中有一个和TextField组件相关。 开发环境 Flutter: 3.10.1Dart: 3.0.1 问题描述 TextField组件设置maxLines: null不限制行数&#xff0c;同时…

【文章学习系列之模型】SCALEFORMER

本章内容 文章概况模型结构主要方法多尺度框架跨尺度标准化模型输入编码损失函数 实验结果消融实验跨尺度标准化自适应损失函数 总结 文章概况 《SCALEFORMER: ITERATIVE MULTI-SCALE REFINING TRANSFORMERS FOR TIME SERIES FORECASTING》是2023年发表于ICLR上的一篇论文。作…

硬件工程师-BUCK开关电源设计

一、电感的伏安特性 电感线圈通电之后&#xff0c;会产生磁场&#xff0c;磁场是有一定极性的&#xff0c;而且磁场分布&#xff0c;是一个封闭的回路。在线圈的内部磁力线是比较密集的&#xff0c;磁场的强度是比较强的&#xff0c;外面空气中的的这个磁力线是比较稀疏的&…

【Unity3D】调整屏幕亮度、饱和度、对比度

1 屏幕后处理流程 调整屏幕亮度、饱和度、对比度&#xff0c;需要使用到屏幕后处理技术。因此&#xff0c;本文将先介绍屏幕后处理流程&#xff0c;再介绍调整屏幕亮度、饱和度、对比度的实现。 屏幕后处理即&#xff1a;渲染完所有对象后&#xff0c;得到一张屏幕图像&#xf…

Centos6.5环境Nginx 1.16.1升级到1.24.0版本

一、背景 2023年4月11日&#xff0c;官方发布了Nginx最新稳定版&#xff0c;版本号为 1.24.0。该版本是基于1.23.x&#xff08;1.23.0 - 1.23.4&#xff09;开发版的Bug修复&#xff0c;以及一些新特性的加入&#xff0c;而形成的稳定版。安全部门扫描后&#xff0c;发现现场不…

车载ECU休眠唤醒-TJA1145

前言 首先&#xff0c;请教大家几个小小问题&#xff0c;你清楚&#xff1a; 什么是TJA1145吗&#xff1f;你知道休眠唤醒控制基本逻辑是怎么样的吗&#xff1f;TJA1145又是如何控制ECU进行休眠唤醒的呢&#xff1f;使用TJA1145时有哪些注意事项呢&#xff1f; 今天&#xff…

chatgpt赋能python:Python中如何输入中文——从安装到常见问题解决

Python中如何输入中文——从安装到常见问题解决 Python是一门广泛使用的编程语言&#xff0c;其优秀的开源性、易用性、灵活性以及庞大的生态圈也令越来越多的人选择Python。但是对于初学者来说&#xff0c;如何正确输入中文常常成为一个问题。本篇文章从安装、常见问题解决、…

LeetCode 560 和为 K 的子数组

LeetCode 560 和为 K 的子数组 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode.cn/problems/subarray-sum-equals-k/description 博主Github&#xff1a;https://github.com/GDUT-Rp/LeetCode 题目&#xff1a; 给你一个整数数组 …

ChatGPT的4个不为人知却非常实用的小功能

今天重点介绍四个ChatGPT很实用的小功能。 一、停止生成 如果在ChatGPT输出内容的过程中&#xff0c;我们发现结果不是自己想要的&#xff0c;可以直接点击“Stop generating”按钮&#xff0c;这样它就会立即停止输出。 二、复制功能 在ChatGPT返回对话的右侧&#xff0c;有三…

在vue中集成高德地图amap-jsapi-loader

前往高德地图开发平台高德开放平台 | 高德地图API 一&#xff1a;申请高德key 去高德官网去创建一个属于自己的地图应用 &#xff08;得到key和秘钥&#xff09; 。 首先&#xff0c;我们要注册一个开发者账号&#xff0c;根据实际情况填写&#xff0c;身份写个人&#xff1a;…

制作嵌入式busybox rootfs系统

1、busybox下载 BusyBox 此篇使用版本BusyBox 1.31.1 (stable) 2、设置交叉编译环境变量 source environment-setup-aarch64-poky-linux或者其他架构的编译链工具 3、busybox编译设置 cd busybox-1.31.1 修改根目录Makefile中的CROSS_COMPILE和ARCH参数 比如ARCH ? ar…

Flask-RESTful的使用

Flask-RESTful的使用 Flask-RESTful基本使用安装定义资源Resources创建API实例添加资源到API运行Flask应用 请求处理请求解析参数校验 响应处理数据序列化定制返回格式 其他功能蓝图装饰器集合路由命名规范路由名称 Flask-RESTful Flask-RESTful是一个用于构建RESTful API的扩展…

中台分类

大家好&#xff0c;我是易安&#xff0c;之前我们谈到过中台的概念&#xff0c;以及如何落地中台。今天我就带你一起看一看&#xff0c;行业常见的中台分类。 业务中台与数据中台 业务中台 业务这个词&#xff0c;其实是有些宽泛的&#xff0c;我听到很多人口中说的业务都不是…

RK3588平台开发系列讲解(驱动基础篇)设备树常用 of 函数

平台内核版本安卓版本RK3588Linux 5.10Android 12文章目录 一、查找节点的 of 函数二、获取属性值的 of 函数三、实验示例3.1、查找的节点代码3.2、获取属性内容代码沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 设备树描述了设备的详细信息,这些信息包括数字类型的…