vector、deque、list相关知识点

news2024/12/24 22:15:42

vector

  • erase返回迭代器指向删除元素后的元素
  • insert返回迭代器指插入的元素
  • reserve只给容器底层开指定大小内存空间,并不添加新元素

deque

底层数据结构

动态开辟的二维数组,一维数组从2开始,以2倍方式扩容,每次扩容和,原来第二维数组,从新的第一维数组下标oldsize/2开始存放,上下都预留空行,方便deque在首尾添加删除元素

在这里插入图片描述

deque适用于首尾进行操作的场景,和vector比,多了push_frontpop_front()

deque底层内存是否是连续的?

不是,分段连续的,每个第二维是连续的

vector、deque、list对比

  • vector特点:动态数组,内存是连续的,2倍的方式进行扩容,

  • deque特点:动态开辟的二维数组空间,第二维是固定长度的数组空间,扩容的时候(第一维的数组进行2倍扩容)

容器的纵向考察:容器掌握的深度

容器的横向考察:各个相似容器之间的对比

vector和deque的区别

vector底层是动态开辟的一维数组,deque则是动态开辟的二维数组

前中后插入删除元素时间复杂度:中间O(n)和末尾O(1), 首部插入deque O(1),vector则是O(n)

对于内存使用效率:vector需要内存空间必须完全连续,deque只需分段连续

中间进行inserterasevector效率更好一点,因为deque分段连续,在边界位置移动需要多余的操作

vector和list区别

vector底层数据结构是数组,list为双向循环链表

数组:增加删除O(n),查询O(n),随机访问O(1)

链表:(考虑搜索时间)增加删除O(1),查询O(n),随机访问O(n)

容器适配器

其实源代码上更接近代理模式

queue和stack底层默认使用deque;priority_queue则使用vector,为什么?

vector初始内存使用效率不如deque,deque一开始就有比较大的第二维连续空间,vector则需要多次的二倍扩容操作。

对于queue需要支持尾插头删,用deque时间复杂度低O(1)

vector需要大片的连续内存,而deque只需要分段的内存,当存储大量数据时,显然deque对于内存的利用率更好一些。

这就是queue和stack底层默认使用deque的理由;

priority_queue堆底层用vector,因为堆是树形结构,底层用vector数组存储更方便随机访问树的节点(下标直接算)。如根节点i,左子节点为 2 i + 1 2i+1 2i+1,右子节点为 2 i + 2 2i+2 2i+2

priority_queue默认是大根堆,比较函数对象为less

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

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

相关文章

【STM32CubeMX】F103独立看门狗

前言 本文记录了我学习STM32CubeMX的过程,方便以后回忆。我们使用的开发板是基于STM32F103C6T6的。本章记录了独立看门狗的使用配置。要学习的话,注意流程一说的,省略的内容。 基础 独立看门狗(WWDG)开启后,复位自动开启。独立看…

Linux shell编程 函数

shell函数的定义 function 函数名 {命令序列 } 函数名() {命令序列 } 函数的返回值 return表示退出函数并返回一个退出值,脚本中可以用$?变量显示该值 使用原则 1.函数一退出就取返回值,英文$?变量只会返回执行的最后一条指令的退出状态码 2…

基于Redis的Stream结构作为消息队列,实现异步秒杀下单

文章目录 1 认识消息队列2 基于List实现消息队列3 基于PubSub的消息队列4 基于Stream的消息队列5 基于Stream的消息队列-消费者组6 基于Redis的Stream结构作为消息队列,实现异步秒杀下单 1 认识消息队列 什么是消息队列:字面意思就是存放消息的队列。最…

2.4G无线麦克风无线音频传输模块

模块概述 M01主要是一个2.4G无线音频传输模块,模组RF电路设计配合独有的软件跳频机制,有效提高了RF的抗干扰能力及传输距离。模组内置高性能的音频转换器,支持48K/24bit高品质的音频采样、支持麦克风的主动降噪,实现了无压缩的数字…

设计模式:SOLID原则

单一职责原则 Single Responsibility Principle(SRP) 接口职责应该单一,不要承担过多的职责。 开放封闭原则 Open Closed Principle(OCP) 添加一个新的功能应该是,在已有代码基础上扩展代码(…

mysql——索引,一篇说清!

直观感受——数据准备 建表与插入数据 CREATE TABLE user (uid int(11) NOT NULL AUTO_INCREMENT,name varchar(50) DEFAULT NULL,pwd varchar(50) DEFAULT NULL,create_time datetime DEFAULT NULL,modify_time timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT…

VSCode For Web 深入浅出 -- 插件加载机制

最近我在浏览 VSCode for web 的 repo,在最近更新的一些 commit 中发现了一个新的 VSCode 插件特性支持,名为 webOpener,它的作用是什么呢?又是如何影响插件加载的呢?在这一篇中我们结合 VSCode For Web 的插件加载机制…

大项目准备(2)

目录 中国十大最具发展潜力城市 docker是什么?能介绍一下吗? 中国十大最具发展潜力城市 按照人随产业走、产业决定城市兴衰、规模经济和交通成本等区位因素决定产业布局的基本逻辑,我们在《中国城市发展潜力排名:2022》研究报告…

uniapp和小程序如何分包,详细步骤手把手(图解)

一、小程序分包 每个使用分包小程序必定含有一个主包。所谓的主包,即放置默认启动页面/TabBar 页面,以及一些所有分包都需用到公共资源/JS 脚本;而分包则是根据开发者的配置进行划分。 在小程序启动时,默认会下载主包并启动主包…

C++学习day--11 程序员必备工具--github

github 的重要性: 网络时代的程序员必备。 github 的作用: 1. 版本管理 2. 多人协作 3. 开源共享 常用方案: gitTortoiseGitgithub [Tortoise ,程序员常称其为小乌龟,小海龟 ] 安装配置步骤 1. 注册 h…

13 KVM虚拟机配置-配置虚拟设备(总线配置)

文章目录 13 KVM虚拟机配置-配置虚拟设备(总线配置)13.1 概述13.2 元素介绍13.3 配置示例 13 KVM虚拟机配置-配置虚拟设备(总线配置) 13.1 概述 总线是计算机各个部件之间进行信息通信的通道。外部设备需要挂载到对应的总线上&a…

MySQL调优系列(四)——执行计划

一、概述 sql语句是有具体的执行过程的,通过查看这个执行过程,可以针对性的优化某一步骤,以加快SQL语句的执行效率。 通过MySQL调优系列(一)——性能监控我们可以知道,有一个查询优化器,查询优…

HTTP第五讲——搭建HTTP实验环境

HTTP简介 HTTP 协议诞生于 30 年前,设计之初的目的是用来传输纯文本数据。但由于形式灵活,搭配URI、HTML 等技术能够把互联网上的资源都联系起来,构成一个复杂的超文本系统,让人们自由地获取信息,所以得到了迅猛发展。…

D. Petya and Array(树状数组 + 前缀和 + 逆序对的思想)

Problem - D - Codeforces Petya 有一个由 n 个整数组成的数组 a。他最近学习了部分和,现在他可以非常快地计算出数组中任何一段元素的和。这个段是一个非空的序列,相邻的元素排在数组中。 现在他想知道他的数组中元素和小于 t 的段的数量。请帮助 Pety…

鸿蒙Hi3861学习九-Huawei LiteOS(互斥锁)

一、简介 互斥锁又被称为互斥型信号量,是一种特殊的二值信号量,用于实现对共享资源的独占式处理。 任意时刻互斥锁的状态只有两种:开锁或闭锁。 当有任务占用公共资源时,互斥锁处于闭锁状态,这个任务获得该互斥锁的使用…

lua | 循环和函数的使用

目录 一、循环与流程控制 循环 流程控制 二、函数 函数 多返回值 可变参数 本文章为笔者学习分享 学习网站:Lua 基本语法 | 菜鸟教程 一、循环与流程控制 循环 lua语言提供了以下几种循环处理方式: 1.while 条件为true时,程序重复…

数据结构(六)—— 二叉树(7)构建二叉树

文章目录 如何使用递归构建二叉树1、创建一颗全新树(题1-5)2、在原有的树上新增东西(题6) 1 106 从 后序 与 中序 遍历序列构造二叉树2 105 从 前序 与 中序 遍历序列构造二叉树3 108 将有序数组转换为二叉搜索树(输入…

施耐德电气 × 牛客:HR如何助力业务数字化转型?

历经一百八十多年的发展,施耐德电气从一家钢铁企业,进入电力与控制领域,再到如今成为全球能源管理和自动化领域的数字化专家,业务覆盖100多个国家,拥有近13万员工。 其背后离不开HR强大后盾的支撑,下面将独…

Linux文件系统目录有什么用?

学习文件系统的意义在于文件系统有很多设计思路可以迁移到实际的工作场景中,比如: MySQL 的 binlog 和 Redis AOF 都像极了日志文件系统的设计;B Tree用于加速磁盘数据访问的设计,对于索引设计也有通用的意义。 特别是近年来分布…

【Java|golang】1010. 总持续时间可被 60 整除的歌曲

在歌曲列表中&#xff0c;第 i 首歌曲的持续时间为 time[i] 秒。 返回其总持续时间&#xff08;以秒为单位&#xff09;可被 60 整除的歌曲对的数量。形式上&#xff0c;我们希望下标数字 i 和 j 满足 i < j 且有 (time[i] time[j]) % 60 0。 示例 1&#xff1a; 输入&…