C++STL容器

一、顺序性容器

简述:顺序容器为程序员提供了控制元素存储和访问顺序的能力。这种顺序不依赖元素的值,而是与元素加入容器时的位置相对应。所有顺序容器都提供了快速顺序访问元素的能力

1.vector(向量)

基本概念和介绍

对于vector容器,它的数据结构与数组非常类似,但是他们之间的不同之处是数组是静态空间,一旦配置了就不能更改,vector却可以进行动态分配,随着元素的插入和删除,内部的空间也会灵活变动,就和C语言中的malloc和C++中的new是一个道理,不用害怕空间不足而一开始就定义一个很大的数组,节省了内存空间

2.deque(双端队列)

基本概念和介绍

deque容器为双端队列,可以对其两端的数据进行操作,因为它没有capacity属性,因此不会像vector那样”旧空间不足而重新配置一块更大空间,然后复制元素,再释放旧空间”,因此,deque没有必须要提供所谓的空间保留(reserve)功能。

3.list

1,list是C++STL容器中的顺序容器,这里的顺序容器区别于关联容器,指的是元素在容器中的位置与大小无关。list和vector不同,vector是顺序存储的,内存是连续的;list底层实际上是双向链表,list的内存是分散的,内存可以在各个位置分布。

2,基于双向链表的数据结构,list具有array、vector、deque等不具备的优势:在任意位置插入和删除元素的时间复杂度O(1),移动元素的效率也很高。因为元素之间是通过指针联系的,在某个元素间插入一个元素改变那指针的指向就可以了。

3,但是正因为底层是双向链表,无法像vector那样通过**下标[]**直接访问元素,需要从头(尾)遍历元素找到元素。

4.array(数组)

array是C++11中新增的容器,它与其他容器不同的是,它的大小是固定的,无法动态扩展或收缩,只允许访问或者替换存储的元素。

二、关联式容器

简述:关联式容器是非线性的树结构,更准确的说是二叉树结构。各元素之间没有严格的物理上的顺序关系,也就是说元素在容器中并没有保存元素置入容器时的逻辑顺序。但是关联式容器提供了另一种根据元素特点排序的功能,这样迭代器就能根据元素的特点“顺序地”获取元素。元素是有序的集合,默认在插入的时候按升序排列。

关联容器包括:

  • map(集合)
  • set(映射)
  • multimap(多重集合)
  • multiset(多重映射)

set

  • set以RBTree作为底层容器
  • 所得元素的只有key没有value,value就是key
  • 不允许出现键值重复
  • 所有的元素都会被自动排序
  • 不能通过迭代器来改变set的值,因为set的值就是键

map

  • map以RBTree作为底层容器
  • 所有元素都是键+值存在
  • 不允许键重复
  • 所有元素是通过键进行自动排序的
  • map的键是不能修改的,但是其键对应的值是可以修改的

三、容器适配器

stack(堆栈)

stack为堆栈,其内部元素都是需要先进后出(FILO)的,也就是说只有栈顶的元素top才可以被访问到

queue(队列)

queue为队列,它和stack堆栈的正好相反,栈是先进后出,而队列则是先进先出(FIFO)。看到这里是不是想起了我们前面学过的一个顺序性容器deque(双端队列),下面来区分一下他们之间的不同之处:

1、queue可以访问两端但是只能修改队头,而deque可以访问两端并且可以在队首和队尾删除和插入元素

2、deque可以从两端入队,但是queue只能从队尾入队,

3、对于弹出队内元素,deque拥有pop_front(删除队头元素)以及pop_back(删除队尾元素)

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

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

相关文章

大模型概述

文章目录 AI大模型的定义AI大模型的分类LoRA 微调 AI大模型的定义 AI大模型是通过深度学习算法和人工神经网络训练出的具有庞大规模参数的人工智能模型。这些模型使用大量的多媒体数据资源作为输入,并通过复杂的数学运算和优化算法来完成大规模的训练,以…

4382系列数字荧光示波器

4382系列数字荧光示波器 简述: 4382系列手持式数字荧光示波器具有8个产品型号,带宽200MHz、350MHz、500MHz、1GHz,最高采样率5GSa/s,最大存储深度60kpts/CH,最快波形捕获率10万个波形/秒,独创的Any Acquire…

专业课145+总分440+东南大学920考研专业基础综合信号与系统数字电路经验分享

个人情况简介 今年考研440,专业课145,数一140,期间一年努力辛苦付出,就不多表了,考研之路虽然艰难,付出很多,当收获的时候,都是值得,考研还是非常公平,希望大…

【部署】Deploying Trino on linux

文章目录 一. Requirements1. Linux operating system2. Java 环境3. Python 二. Installing Trino三. Configuring Trino1. 节点配置2. JVM 配置3. Config properties4. Log levels5. Catalog properties 四. Running Trino 一. Requirements 1. Linux operating system 64位…

SpringBoot错误处理机制解析

SpringBoot错误处理----源码解析 文章目录 1、默认机制2、使用ExceptionHandler标识一个方法,处理用Controller标注的该类发生的指定错误1).局部错误处理部分源码2).测试 3、 创建一个全局错误处理类集中处理错误,使用Controller…

基于java技术的电子商务支撑平台

摘 要 随着网络技术的发展,Internet变成了一种处理日常事务的交互式的环境。互联网上开展各种服务已经成为许多企业和部门的急切需求。Web的普遍使用从根本上改变了人们的生活方式、工作方式,也改变了企业的经营方式和服务方式。人们可以足不出户办理各…

财务管理在IT服务管理中的重要作用

官方网站 www.itilzj.com 文档资料: wenku.itilzj.com 财务管理作为一种管理组织财务资源的方法,在IT服务领域扮演着关键的角色。其涵盖的范围涉及预算编制、成本控制、投资决策、财务报告和绩效评估等多个方面,直接关系到IT服务的财务健康和整体运作。…

WT588F02A-16S录放音语音芯片为何需要配备自动增益控制麦克风?

在语音录放领域,一款优秀的语音芯片如WT588F02A-16S不仅需要具备高品质的录音和播放功能,还需要与合适的麦克风配合,以确保音频输入的最佳效果。而其中,自动增益控制(AGC)麦克风在这一过程中发挥着重要作用…

Csharp(C#)无标题栏窗体拖动代码

C#(C Sharp)是一种现代、通用的编程语言,由微软公司在2000年推出。C#是一种对象导向的编程语言,它兼具C语言的高效性和Visual Basic语言的易学性。C#主要应用于Windows桌面应用程序、Windows服务、Web应用程序、游戏开发等领域。C…

使用Redis构建简易社交网站(3)-状态与信息流

目的 本文目的:实现获取主页时间线和状态推送功能。(完整代码附在文章末尾) 相关知识 在我上一篇文章 《使用Redis构建简易社交网站(2)-处理用户关系》中提到了实现用户关注和取消关注功能。 那这篇文章将教会你掌握:1&#x…

蓝桥杯每日一题2023.12.3

题目描述 1.移动距离 - 蓝桥云课 (lanqiao.cn) 题目分析 对于此题需要对行列的关系进行一定的探究,所求实际上为曼哈顿距离,只需要两个行列的绝对值想加即可,预处理使下标从0开始可以更加明确之间的关系,奇数行时这一行的数字需…

做外贸如何写开发信?外贸邮件营销怎么写?

外贸业务员写开发信的技巧?撰写客户开发信模板详解! 外贸经营是一项竞争激烈的行业,写好开发信是吸引客户、建立合作关系的重要一环。蜂邮EDM将为您详细介绍如何撰写出色的开发信,以吸引客户的眼球,引领他们与您建立联…

Linux服务器初次使用需要的环境配置

一、划分磁盘 1.查看磁盘 sudo fdisk -l Disk /dev/sda: 3.7 TiB, 4000787030016 bytes, 7814037168 sectors //新增的硬盘 Units: sectors of 1 * 512 512 bytes Sector size (logical/physical): 512 bytes / 4096 bytes I/O size (minimum/optimal): 4096 bytes / 4096…

【数电笔记】17-具体函数的卡诺图填入

目录 说明: 用卡诺图表示逻辑函数 1. 基本步骤 2. 例题 2.1 例1-真值表转换卡诺图 2.2 例2-标准与或式画卡诺图 2.3 例3-非标准与或式画卡诺图(常见,重点掌握) 说明: 笔记配套视频来源:B站;本系列笔…

el-pagination 纯前端分页

需求&#xff1a;后端把所有数据都返给前端&#xff0c;前端进行分页渲染。 实现思路&#xff1a;先把数据存储到一个大数组中&#xff0c;然后调用方法进行切割。主要使用数组的slice方法 所有代码&#xff1a; html <template><div style"padding: 20px&qu…

分享74个节日PPT,总有一款适合您

分享74个节日PPT&#xff0c;总有一款适合您 74个节日PPT下载链接&#xff1a;https://pan.baidu.com/s/18YHKkyJsplx-Gjj7ofpFrg?pwd6666 提取码&#xff1a;6666 Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 学习知识费力气&#xff0c;收集整理更不易…

短波红外相机的原理及应用场景

短波红外 (简称SWIR&#xff0c;通常指0.9~1.7μm波长的光线) 是一种比可见光波长更长的光。这些光不能通过“肉眼”看到&#xff0c;也不能用“普通相机”检测到。由于被检测物体的材料特性&#xff0c;一些在可见光下无法看到的特性&#xff0c;却能在近红外光下呈现出来&…

深度学习数据集的划分(加载kaggle的dog数据,多gpu训练加载参数)待更新

待更新 把dog-breed-identification.zip 文件放到data文件目录下&#xff1a; 该文件解压之后得到如下&#xff1a; 遍历train中的所有文件&#xff0c;train_file.split(‘.’)[0]是根据.划分这个文件名&#xff0c;得到前缀和后缀&#xff0c;下标为0的是去掉后缀的文件名…

国家图书馆论文检索证明申请步骤

国家图书馆论文检索证明申请步骤 登录国家图书馆 咨询提交平台 点击论文收引查证 添加附件这一块&#xff0c;需要自己制作一个有格式的EXCEL 卷&#xff0c;期&#xff0c;页码如何查询&#xff1f; 输入自己的联系方式等待工作人员联系即可

接口获取数据控制台打印有值但是展开又没有了

谷歌浏览器只会展现响应式数据最后的结果&#xff0c;证明原来接口是有值的&#xff0c;后面对这个数据进行操作后&#xff0c;最终没有值了。所以对数据进行操作时最好对数据进行一次深拷贝 JSON.parse(JSON.stringify(data))