62.C++ deque容器

news2024/10/7 20:28:56

目录

1.deque容器基本概念

2.deque与vector区别: 

3.deque构造函数 

 4.deque赋值操作

5.deque大小操作 

 6.deque双端操作和删除

 7.deque数据存取

8.deque插⼊操作 

 9.deque删除操作


1.deque容器基本概念

        deque是⼀种双向开⼝的连续线性空间。所谓的双向开⼝,意思是可以在头尾两端分别做元素的插⼊和删除操作。

2.deque与vector区别: 

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

3.deque构造函数 

1.deque<T> deqT;//默认构造形式
2.deque(beg, end);//构造函数将[beg, end)区间中的元素拷⻉给本身。
3.deque(n, elem);//构造函数将n个elem拷⻉给本身。
4.deque(const deque &deq);//拷⻉构造函数。

void printDeque(const deque<int>& d)
{
	for (deque<int>::const_iterator it = d.begin(); it != d.end(); it++) {
		cout << *it << " ";
	}
	cout << endl;
}
//deque构造
void test01() {
	deque<int> d1; //无参构造函数
	for (int i = 0; i < 10; i++){
		d1.push_back(i);
	}
	printDeque(d1); //输出 0 1 2 3 4 5 6 7 8 9
	deque<int> d2(d1.begin(), d1.end());
	printDeque(d2); //输出 0 1 2 3 4 5 6 7 8 9
	deque<int>d3(10, 100);
	printDeque(d3); //输出 100 100 100 100 100 100 100 100 100 100
	deque<int>d4 = d3;
	printDeque(d4); //输出 100 100 100 100 100 100 100 100 100 100
}

 4.deque赋值操作

1.assign(beg, end);//将[beg, end)区间中的数据拷⻉赋值给本身。
2.assign(n, elem);//将n个elem拷⻉赋值给本身。
3.deque& operator=(const deque &deq); //?载等号操作符
4.swap(deq);// 将deq与本身的元素互换

void printDeque(const deque<int>& d)
{
	for (deque<int>::const_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);//输出 0 1 2 3 4 5 6 7 8 9
	deque<int>d2;
	d2 = d1;
	printDeque(d2);//输出 0 1 2 3 4 5 6 7 8 9
	deque<int>d3;
	d3.assign(d1.begin(), d1.end());//将d1[begin, end)区间中的数据拷贝赋值给d3
	printDeque(d3);//输出 0 1 2 3 4 5 6 7 8 9
	deque<int>d4;
	d4.assign(10, 100);//将10个100拷贝赋值给本身
	printDeque(d4);//输出 100 100 100 100 100 100 100 100 100 100
}

5.deque大小操作 

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

 

void printDeque(const deque<int>& d)
{
	for (deque<int>::const_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); //输出 0 1 2 3 4 5 6 7 8 9
	//判断容器是否为空
	if (d1.empty()) {
		cout << "d1为空!" << endl;
	}
	else {
		cout << "d1不为空!" << endl; //输出 d1不为空
		//统计大小
		cout << "d1的大小为:" << d1.size() << endl; //输出 d1的大小为10
	}
	//重新指定大小
	d1.resize(15, 1);
	printDeque(d1); //输出 0 1 2 3 4 5 6 7 8 9 1 1 1 1 1
	d1.resize(5);
	printDeque(d1); //输出 0 1 2 3 4
}

 6.deque双端操作和删除

1.push_back(elem);//在容器尾部添加⼀个数据
2.push_front(elem);//在容器头部插⼊⼀个数据
3.pop_back();//删除容器最后⼀个数据
4.pop_front();//删除容器第⼀个数据

void printDeque(const deque<int>& d)
{
	for (deque<int>::const_iterator it = d.begin(); it != d.end(); it++) {
		cout << *it << " ";
	}
	cout << endl;
}
//两端操作
void test01()
{
	deque<int> d;
	//尾插
	d.push_back(10);
	d.push_back(20);
	//头插
	d.push_front(100);
	d.push_front(200);
	printDeque(d); //输出 200 100 10 20
	//尾删
	d.pop_back();
	//头删
	d.pop_front();
	printDeque(d); // 输出 100 10
}

 7.deque数据存取

1.at(idx);//返回索引idx所指的数据,如果idx越界,抛出out_of_range。
2.operator[];//返回索引idx所指的数据,如果idx越界,不抛出异常,直接出错。
3.front();//返回第⼀个数据。
4.back();//返回最后⼀个数据

void printDeque(const deque<int>& d)
{
	for (deque<int>::const_iterator it = d.begin(); it != d.end(); it++) {
		cout << *it << " ";
	}
	cout << endl;
}
//数据存取
void test01()
{
	deque<int> d;
	d.push_back(10);
	d.push_back(20);
	d.push_front(100);
	d.push_front(200);
	for (int i = 0; i < d.size(); i++) {
		cout << d[i] << " "; //输出 200 100 10 20
	}
	cout << endl;
	for (int i = 0; i < d.size(); i++) {
		cout << d.at(i) << " "; //输出 200 100 10 20
	}
	cout << endl;
	cout << "front:" << d.front() << endl; //输出 200
	cout << "back:" << d.back() << endl; //输出20
}

8.deque插⼊操作 

1.insert(pos,elem);//在pos位置插⼊⼀个elem元素的拷⻉,返回新数据的位置。
2.insert(pos,n,elem);//在pos位置插⼊n个elem数据,⽆返回值。
3.insert(pos,beg,end);//在pos位置插⼊[beg,end)区间的数据,⽆返回值。

void printDeque(const deque<int>& d)
{
	for (deque<int>::const_iterator it = d.begin(); it != d.end(); it++) {
		cout << *it << " ";
	}
	cout << endl;
}
//插入
void test01()
{
	deque<int> d;
	d.push_back(10);
	d.push_back(20);
	d.push_front(100);
	d.push_front(200);
	printDeque(d); //输出 200 100 10 20
	d.insert(d.begin(), 1000);
	printDeque(d); //输出 1000 200 100 10 20
	d.insert(d.begin(), 2, 10000);
	printDeque(d); //输出 10000 10000 1000 200 100 10 20
	deque<int>d2;
	d2.push_back(1);
	d2.push_back(2);
	d2.push_back(3);
	d.insert(d.begin(), d2.begin(), d2.end());
	printDeque(d); //输出 1 2 3 10000 10000 1000 200 100 10 20
}

 9.deque删除操作

1.clear();//移除容器的所有数据
2.erase(beg,end);//删除[beg,end)区间的数据,返回下⼀个数据的位置。
3.erase(pos);//删除pos位置的数据,返回下⼀个数据的位置。

void printDeque(const deque<int>& d)
{
	for (deque<int>::const_iterator it = d.begin(); it != d.end(); it++) {
		cout << *it << " ";
	}
	cout << endl;
}
//删除
void test01(){
	deque<int> d;
	d.push_back(10);
	d.push_back(20);
	d.push_front(100);
	d.push_front(200);
	printDeque(d); //输出 200 100 10 20
	d.erase(d.begin());
	printDeque(d); //输出 100 10 20
	d.erase(d.begin(), d.end());// 已清空
	d.clear();
	printDeque(d);// 已清空
}

 

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

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

相关文章

找不到vcruntime140.dll,无法继续执行代码。可行的解决方法分享

在日常使用电脑的过程中&#xff0c;我们可能会遇到各种问题&#xff0c;其中之一就是提示“由于找不到 VCRUNTIME140.dll&#xff0c;无法继续执行代码。重新安装程序可能会解决此问题。”&#xff0c;这一般是什么原因导致了这个问题&#xff0c;我们要如何解决&#xff1f; …

14:00面试,14:10就出来了,问的问题有点变态......

从小厂出来&#xff0c;没想到在另一家公司又寄了。 到这家公司开始上班&#xff0c;加班是每天必不可少的&#xff0c;看在钱给的比较多的份上&#xff0c;就不太计较了。没想到5月一纸通知&#xff0c;所有人不准加班&#xff0c;加班费不仅没有了&#xff0c;薪资还要降40%…

亚马逊云科技GenAI菁英创造营,致力于大模型时代高校AI人才培养

大语言模型&#xff08;LLM&#xff09;产业的蓬勃发展将改变数字产业生态&#xff0c;助力AI工业化进程、变革海量应用交互方式、创造数字产业新的增长空间。 “GenAI Talent Program”由亚马逊云科技特别打造&#xff0c;该计划致力于大模型时代高校AI人才培养&#xff0c;通…

36种水果和蔬菜识别(pytorch框架,深度卷积网络模型,可以实现照片连续识别和视频识别)

1.效果视频&#xff1a;36种水果和蔬菜识别&#xff08;pytorch框架&#xff0c;深度卷积网络模型&#xff0c;可以实现照片连续识别和视频识别&#xff09;_哔哩哔哩_bilibili 2.项目文件夹 第一个文件夹&#xff08;data&#xff09;&#xff1a; 装载的是原始图像 第二个文…

Spring Cloud 微服务2

Eureka 注册中心&#xff0c;服务的自动注册、发现、状态监控 Ribbon 负载均衡&#xff0c;Eureka中已经集成了负载均衡组件 Hystrix 熔断器&#xff0c;用于隔离访问远程服务、第三方库&#xff0c;防止出现级联失败。 Feign 远程调用&#xff0c;将Rest的请求进行隐藏&a…

全面解析MES系统中的报工操作

一、报工操作的定义&#xff1a; 报工操作是指在生产过程中&#xff0c;操作员通过MES系统记录和提交生产工序的相关信息&#xff0c;如工时、产量、质量等。报工操作将生产过程中的实际情况反馈给MES系统&#xff0c;实现生产数据的实时采集和记录。 二、报工操作的流程&…

骨传导耳机头晕,想吐怎么办?骨传导耳机会不会脑震荡

在解答骨传导耳机佩戴会头晕的这个现象&#xff0c;我先简单介绍一下&#xff0c;什么是骨传导耳机&#xff1f; 骨传导耳机可以理解为以人类骨头为媒介&#xff0c;声音通过骨头的振动传递到人的听觉神经再传递到听觉中枢&#xff0c;它是声音的一种传导方式&#xff0c;只不…

单片机通用学习-​什么是寄存器?​

什么是寄存器&#xff1f; 寄存器是一种特殊的存储器&#xff0c;主要用于存储和检查微机的状态。CPU寄存器用于存储和检查CPU的状态&#xff0c;具体包括计算中途数据、程序因中断或子程序分支时的返回地址、计算结果为零时的负值、计算结果为零时的信息、进位值等。 由于CP…

4、DVWA——文件包含

文章目录 一、文件包含概述二、low2.1 源码分析2.2 通关分析 三、medium3.1 源码分析3.2 通关思路 四、high4.1 源码分析4.2 通关思路 五、impossible 一、文件包含概述 文件包含是指当服务器开启allow_url_include选项时&#xff0c;就可以通过php的某些特性函数&#xff08;i…

金融风控数据分析-信用评分卡建模

本文引用自&#xff1a; 金融风控&#xff1a;信用评分卡建模流程 - 知乎 (zhihu.com) 在原文的基础上加上了一部分自己的理解&#xff0c;转载在CSDN上作为保留记录。 本文涉及到的数据集可直接从天池上面下载&#xff1a; Give Me Some Credit给我一些荣誉_数据集-阿里云…

Python 分析HTTP的可靠性

在这篇文章中&#xff0c;我们将介绍如何使用 Python 来分析代理服务提供商的可靠性。代理服务在许多场景中都非常有用&#xff0c;例如突破地理限制、保护隐私和提高网络安全性。然而&#xff0c;并非所有的代理服务提供商都是可靠的。因此&#xff0c;我们将使用 Python 来测…

存储方案作为产品——Midgard探索

作者 | greatstone94 导读 互联网业务大多是围绕数据展开&#xff0c;获取、生产数据&#xff0c;投入到产品中为用户服务。百度的搜索业务正是典型的数据密集业务&#xff0c;数据规模大&#xff0c;使用方式多样&#xff0c;极为关注如何构建高效低成本的存储系统。 然而软硬…

算法工程题(非递减顺序 排列)

* 题意说明&#xff1a; * 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2&#xff0c;另有两个整数 m 和 n &#xff0c; * 分别表示 nums1 和 nums2 中的元素数目。 * 请你 合并 nums2 到 nums1 中&#xff0c;使合并后的数组同样按 非递减顺序 排列。…

flex实现瀑布流布局可用于uniapp项目和vue项目

flex布局实现瀑布流 介绍 flex实现瀑布流布局&#xff0c;可用于vue项目,uniapp项目。 实现方式 将列表分为两列或者多列&#xff0c;在循环时分别处理列表数据显示。 预览地址 http://diy.hsycms.com/waterfall/index.htmlhttps://gitee.com/link?targethttp%3A%2F%2Fd…

gitlab升级

1.下载需要的版本 wget -c https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-15.7.6-ce.0.el7.x86_64.rpm --no-check-certificate gitlab-ce-15.4.6-ce.0.el7.x86_64.rpm gitlab-ce-15.7.6-ce.0.el7.x86_64.rpm gitlab-ce-15.9.7-ce.0.el7.x86_64.rpm g…

node 如何下载任意版本

开门见山啦 第一步&#xff1a;打开node官网 Node.js 第二步&#xff1a;点击下载 进入下面的页面&#xff0c;然后往下滑&#xff0c;点击 All download options 查看以往所有的版本号&#xff1a; 这样就可以按自己的需求下载对应的node版本啦 或者 &#xff1a; 最简单…

【Cortex-M3权威指南】学习笔记4 - 异常

目录 实现 CM3流水线CM3 详细框图CM3 总线接口总线连接模板 异常异常类型优先级定义优先级组 向量表中断输入于挂起NMI中断挂起 Fault 类异常总线 faults存储器管理 faults用法 faults SVC 与 PendSV 实现 CM3 流水线 CM3 处理器使用 3 级流水线&#xff0c;分别是&#xff1a;…

Elasticsearch 7.6 - Springboot应用基础操作篇

ES 7.6 - JAVA应用基础操作篇 环境准备依赖配置 实体类准备使用说明索引/映射操作创建索引和映射索引和映射相关查询删除索引 文档操作插入数据更新数据删除数据批量操作 文档查询根据ID查询根据字段精准查询根据字段分词查询控制返回字段范围查询组合查询排序分页高亮搜索聚合…

C#---第21: partial修饰类的特性及应用

0.知识背景 局部类型适用于以下情况&#xff1a; 类型特别大&#xff0c;不宜放在一个文件中实现。一个类型中的一部分代码为自动化工具生成的代码&#xff0c;不宜与我们自己编写的代码混合在一起。需要多人合作编写一个类 局部类型的限制: 局部类型只适用于类、接口、结构&am…

MySQL之脏读,不可重复读与幻读的概念及区别

MySQL是一款常用的关系型数据库&#xff0c;但在使用过程中&#xff0c;可能会遇到一些问题&#xff0c;比如脏读、不可重复读和幻读。这些问题可能会导致数据的不一致性&#xff0c;因此需要了解它们的概念及区别。 1. 脏读 首先是脏读。脏读是指在一个事务中读取了另一个事…