C++ deque(1)

news/2025/2/1 2:42:58 标签: c++, 有问必答, 笔记

1.deque介绍

deque的扩容不像vector那样麻烦 直接新开一个buffer 不用重新开空间再把数据全部移过去

deque本质上是一个指针数组和vector<vector>不一样,vector<vector>本质上是一个vector对象数组!并且vector<vector>的buffer是不一样大的 而deque的每个buffer大小是固定的

指针数组满了之后直接扩容就可以了,并且代价很低基本可以忽略不记(只用拷贝指针数组的全部指针就可以了)

数据插入的时候 优先往中间插入 因为这样你尾插和头插就不用去挪动数据了! 

2.deque和vector与list的对比

相比vector

优点:

1.极大的缓解了扩容问题,头插 头删问题

缺点

1.但是[ ]不够极致 deque要计算在哪个buffer的第几个(计算方法如下)

相比list

优点:

1.可以支持下表随机访问

2.cpu高速缓存 效率不错 

缺点:

1.头尾插入删除都不错 但是中间插入删除呢?(很拉跨)

这个时候就很麻烦

有两种方式

(1)挪动数据  代价很大不用说了(并且只能挪插入的那个buffer 不能挪其它buffer)

(2)扩容 对当前buffer扩容 但是不建议这么弄 包括库里面也不是这样实现的

这(buffer大小)会影响[]的使用(看上图)[]效率会进一步降低

3.deque的优势和不足

优势:

deque有一个最大的优势 就是非常适合高频的头插头删和尾插尾删

很适合用来适配栈和队列的默认容器

不足:

非常不适合中间插入和删除

方括号用的不多的时候可以用deque

deque的实现是非常复杂的 比vector和list复杂很多

这里只是一个简单介绍


http://www.niftyadmin.cn/n/5838974.html

相关文章

【Leetcode 每日一题 - 补卡】219. 存在重复元素 II

问题背景 给你一个整数数组 n u m s nums nums 和一个整数 k k k&#xff0c;判断数组中是否存在两个 不同的索引 i i i 和 j j j&#xff0c;满足 n u m s [ i ] n u m s [ j ] nums[i] nums[j] nums[i]nums[j] 且 ∣ i − j ∣ < k |i - j| < k ∣i−j∣<…

【大厂AI实践】OPPO:大规模知识图谱及其在小布助手中的应用

导读&#xff1a;OPPO知识图谱是OPPO数智工程系统小布助手团队主导、多团队协作建设的自研大规模通用知识图谱&#xff0c;目前已达到数亿实体和数十亿三元组的规模&#xff0c;主要落地在小布助手知识问答、电商搜索等场景。 本文主要分享OPPO知识图谱建设过程中算法相关的技…

毛桃病害分割数据集labelme格式212张6类别

数据集格式&#xff1a;labelme格式(不包含mask文件&#xff0c;仅仅包含jpg图片和对应的json文件) 图片数量(jpg文件个数)&#xff1a;212 标注数量(json文件个数)&#xff1a;212 标注类别数&#xff1a;6 标注类别名称:["manchaBaterial","Oidio",&…

目标检测与语义分割

目标检测 图片分类问题是判断图片中是否存在特定的对象。 图片定位分类问题除了判断图片是否包含特定对象外&#xff0c;还要定位对象在图像中的位置&#xff0c;并使用**边界框&#xff08;bounding box&#xff09;**标记出该位置。 边界框的四个参数为 b x b_{x} bx​&#…

书生大模型实战营5

文章目录 L1——基础岛书生大模型全链路开源开放体系概览书生大模型全链路的数据书生大模型全链路的开源数据处理工具箱预训练 InterEvo微调 XTunerOpenCompass 评测体系部署 LMDeploy智能体 Lagent智能体 MindSearchHuixiangDou L1——基础岛 书生大模型全链路开源开放体系 …

车载软件架构 --- 基于AUTOSAR软件架构的ECU开发流程小白篇

我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 简单&#xff0c;单纯&#xff0c;喜欢独处&#xff0c;独来独往&#xff0c;不易合同频过着接地气的生活…

Web-3.0(Solidity)基础教程

Solidity 是 以太坊智能合约编程语言&#xff0c;用于编写 去中心化应用&#xff08;DApp&#xff09;。如果你想开发 Web3.0 应用&#xff0c;Solidity 是必学的。 Remix - Ethereum IDE&#xff08;在线编写 Solidity&#xff09; 特性Remix IDEHardhat适用场景适合 初学者 …

【回溯+剪枝】找出所有子集的异或总和再求和 全排列Ⅱ

文章目录 1863. 找出所有子集的异或总和再求和解题思路&#xff1a;子集问题解法&#xff08;回溯 剪枝&#xff09;47. 全排列 II解题思路&#xff1a;排序 回溯 剪枝 1863. 找出所有子集的异或总和再求和 1863. 找出所有子集的异或总和再求和 一个数组的 异或总和 定义为…