C++之deque与vector、list对比分析

一.deque讲解

对于vector和list,前一个是顺序表,后一个是带头双向循环链表,前面我们已经实现过,这里就不再讲解了,直接上deque了。

deque:双端队列

常见接口大家可以查看下面链接:

deque - C++ Reference

这里我们直接讲底层逻辑。

deque是开了一个指针数组,称之为中控,当我们插入数据时,就会从中间一个随机位置,开一个长度可以保持不变的数组,用中控指针指向,这样就可以在里面插入数据了。

如果想要头插,那么需要在中控最前面位置用指针指向一段开辟的空间,然后在该空间结尾插入数据,如果中控满了,就需要扩容,头删找到最前一个数据进行删除。

尾插,即在中控的最后一个开空间的指针指向的空间插入,如果该空间恰好满了,就去下一个中控位置,如果中控满了,就扩容。

deque也可以支持,[]访问,但是对于每个空间的计算需要大家仔细考虑,如果每个中控中的指针指向的空间大小相同,那么计算可以简单点,但是这样如果想要在中间位置插入或删除,就需要大量的移动位置,如果指针指向的空间大小不同,那么[]计算就会比较复杂,但是中间插入删除就可以简单许多,可以说“成也萧何,败也萧何”

中控每一个iterator都有四个指针:first指向开辟空间的起始位置,last指向结尾位置,cur是当前最后一个元素的下一个位置,node指向中控的指针位置,便于指针+-移动

这就是deque的底层逻辑,至于实现,大家可以自行完成。

二.对比分析

接下来我们分析vector/list/deque的各自优缺点:

如图;

相信大家看完图,就明白了三者的优缺点,感谢大家的支持!!!

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

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

相关文章

Java多线程实战-CountDownLatch模拟压测实现

🏷️个人主页:牵着猫散步的鼠鼠 🏷️系列专栏:Java全栈-专栏 🏷️本系列源码仓库:多线程并发编程学习的多个代码片段(github) 🏷️个人学习笔记,若有缺误,欢迎评论区指正…

深度学习 精选笔记(13.2)深度卷积神经网络-AlexNet模型

学习参考: 动手学深度学习2.0Deep-Learning-with-TensorFlow-bookpytorchlightning ①如有冒犯、请联系侵删。 ②已写完的笔记文章会不定时一直修订修改(删、改、增),以达到集多方教程的精华于一文的目的。 ③非常推荐上面(学习参考&#x…

单片机学到什么程度才可以去工作?

单片机学到什么程度才可以去工作? 如果没有名校或学位的加持,你还得再努力一把,才能从激烈的竞争中胜出。以下这些技能可以给你加分,你看情况学,不同行业对这些组件会有取舍: . Cortex-M内核:理解MCU内核各部件的工作机制&#…

如何优化使用Nginx

文章目录 🔊博主介绍🥤本文内容数据压缩负载均衡安装OpenResty或ngx_http_lua_module配置Nginx以启用Lua编写Lua脚本配置upstream块以使用Lua变量测试配置 合并请求1. 确保SSI模块已启用2. 配置Nginx以使用SSI3. 使用SSI指令4. 重新加载或重启Nginx 集成…

Python爬虫与数据可视化源码免费领取

引言 作为一名在软件技术领域深耕多年的专业人士,我不仅在软件开发和项目部署方面积累了丰富的实践经验,更以卓越的技术实力获得了🏅30项软件著作权证书的殊荣。这些成就不仅是对我的技术专长的肯定,也是对我的创新精神和专业承诺…

【leetcode-53最大子数组和】

题目: 给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组是数组中的一个连续部分。 示例 1: 输入:nums [-2,1,-3,4,-1,2,1,-5,4] …

MySQL知识点极速入门

准备SQL 创建数据库: 创建一个名为emptest的数据库 create database emptest; use emptest; 创建数据表: 设计一张员工信息表,要求如下: 1. 编号(纯数字) 2. 员工工号 (字符串类型,长度不超…

Windows10中配置并使用nvidia-smi

1. 问题 当在window10系统中使用nvidia-smi命令时: 会得到提示:nvidia-smi不是内部或外部命令,也不是可运行的程序或批处理文件。 注:其实安装NVIDIA控制面板时,软件已内置安装了nvidia-smi.exe,我们只需…

文件包含漏洞(input、filter、zip)

一、PHP://INPUT php://input可以访问请求的原始数据的只读流,将post请求的数据当作php代码执行。当传入的参数作为文件名打开时,可以将参数设为php://input,同时post想设置的文件内容,php执行时会将post内容当作文件内容。从而导致任意代码…

【Java刷题篇】串联所有单词的子串

这里写目录标题 📃1.题目📜2.分析题目📜3.算法原理🧠4.思路叙述✍1.进窗口✍2.判断有效个数✍3.维护窗口✍4.出窗口 💥5.完整代码 📃1.题目 力扣链接: 串联所有单词的子串 📜2.分析题目 阅…

长连接技术

个人学习记录,欢迎指正 1.轮询 1.1 轮询的形式 短连接轮询 前端每隔一段时间向服务端发起一次Http请求来获取数据。 const shortPolling () > { const intervalHandler setInterval(() > {fetch(/xxx/yyy).then(response > response.json()).then(respo…

企业计算机服务器中了devicdata勒索病毒怎么办,devicdata勒索病毒解密工具流程

随着科学技术的不断发展与应用,越来越多的企业开始利用网络开展各项工作业务,网络为企业的生产运营提供了极大便利,大大提高了生产运营效率,同时也为企业的发展规划带来不错的契机。但网络是一把双刃剑,网络在为人们提…

HAProxy高性能负载均衡器

一、HAProxy基础知识 (一)HAProxy概述 HAProxy是一款基于事件驱动、单进程模型设计的四层与七层负载均衡器,它能够在TCP/UDP层面以及HTTP(S)等应用层协议上实现高效的流量分发。HAProxy不仅适用于Web服务器负载均衡,还能应用于数据…

AI大浪潮,怎能少了国产HBM内存?

据有关报道显示,武汉新芯半导体制造有限公司(XMC)正在启动一项专注于开发和生产高带宽内存(HBM)的项目。 HBM作为一种关键的DRAM类型,对于人工智能(AI)和高性能计算(HPC&…

腾讯云轻量应用服务器2核4G5M代表什么意思?

腾讯云服务器2核4G5M带宽配置是代表什么?代表2核CPU、4G内存、5M公网带宽,这是一款轻量应用服务器,系统盘为60GB SSD云硬盘,活动页面 txybk.com/go/txy 活动打开如下图: 腾讯云2核4G5M服务器 如上图所示,这…

智慧公厕建设的主要目标是什么?

随着城市化进程的不断推进,公共厕所作为城市基础设施的重要组成部分,也变得越来越重要。为了提升公共厕所的管理水平、提供更好的服务质量,智慧公厕应运而生。智慧公厕的建设旨在通过信息化手段实现公共厕所的全面感知监测,实现公…

Jmeter文件上传不成功问题

前言 最近好忙呀,项目上线然后紧接着又客户培训了,由于项目有个模块全是走配置的,所以导致问题不断,近期要培训为了保障培训时客户同时操作的情况,所以把我从功能端抽出来做压测了,之前安排了2个同事写压测…

力扣24. 两两交换链表中的节点

新建虚拟头节点,用3个指针记录前3个节点,然后再相互赋值指向,再移动当前节点,当前节点所在的位置,只能交换该节点的后两个节点(所以必须建立虚拟头节点,才能操作第1,2个节点&#xf…

ts版本微信小程序在wxml保存文件不刷新页面的解决办法

将project.config.json中的skylineRenderEnable改为false "skylineRenderEnable": false

python爬虫-AES.CBS加密案例(mmz批量爬取)

下载mmz本页数据 批量下载请看主页!!! 代码: import requests from Crypto.Cipher import AES import base64cookies {PHPSESSID: 48nu182kdlsmgfo2g7hl6eufsa,Hm_lvt_6cd598ca665714ffcd8aca3aafc5e0dc: 1710568549,SECKEY_A…