STL容器总结

2023-11-17

1.Vector:
本质是动态数组,拥有一段连续的内存空间,并且起始地址不变,能非常好的支持随机存取,即[]操作符,但由于它的内存空间是连续的,所以在中间进行插入和删除会造成内存块的拷贝,如果空间不够,则另外分配新的两倍大小的空间,然后把旧空间释放掉。这些都大大影响了vector的效率。
vector不适合push_front(效率很低)。
vector不适合中间插入及删除操作,中间插入及删除操作会引起内存拷贝。
2.List:
双向链表, 它的内存空间可以是不连续的,通过指针来进行数据的访问,这个特点使得它的随机存取变的非常没有效率,因此它没有提供[]操作符的重载,但由于链表的特点,它可以以很好的效率支持任意地方的删除和插入。
list适合插入删除频繁的场所,不管插入还是删除,时间基本上都是常数。
list不适合随机线性访问
3.Deque:
deque在逻辑上看起来是连续的空间,内部是一段一段的定量连续空间构成,一旦有必要在deque的前端或尾端增加新空间,deque会配置一段定量的连续空间,串联在整个deque的头部或尾部。
deque采用一块所谓的map(注:不是stl里面的map容器)作为中控器,其实就是一小块连续空间,其中的每一个元素都是指针,指向另外一段较大的连续线性空间,称之为缓冲区。
设计deque迭代器应该具备两个特征的结构和功能:
1.既然deque存储空间是分段的连续空间,迭代器应该能够指出当前的连续空间在哪里。
2.因为缓冲区有边界,迭代器还应该能判断当前是否处于缓冲区的边缘,如果是,一旦前进或后退,
就必须跳转到下一个或上一个缓冲区。
deque实际上是在功能上合并了vector和list。
优点:
随机访问方便,即支持[]操作和vector.at();
在内部方便的进行插入和删除操作;
可在两端进行push、pop。
缺点:
因为涉及数据结构的维护比较复杂,采用分段连续空间,所以占有内存相对多。
使用区别:
如果需要高效的随机存储,而不在乎插入和删除的效率,则使用vector。
如果需要大量的插入和删除,而不关心随机存取,则应使用list。
如果需要随机存取,且关心亮度数据的插入和删除,则应使用deque。
在这里插入图片描述
在这里插入图片描述
4.Stack:
stack是deque的一种变种,优缺点不变。
5.Queue:
queue是deque的一种变种,优缺点不变。
6.Heap:
容器采用二叉树存储数据,所以heap容器适合经常排序的场所,heap容器里的数据是自动排序的。
7.Map:
STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个称为该关键字的值)的数据处理能力,由于这个特性map内部的实现自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能。
8.Set:
set是集合,set中不会包含重复的元素,这是和vector的第一个区别,第二个区别是set内部用平衡二叉树实现,便于元素查找,而vector是使用连续内存存储,便于随机存取。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STL容器总结 的相关文章

随机推荐

  • c++虚函数实现机制及内存模型

    前言 大家都应该知道C 的精髓是虚函数吧 虚函数带来的好处就是 可以定义一个基类的指针 其指向一个继承类 当通过基类的指针去调用函数时 可以在运行时决定该调用基类的函数还是继承类的函数 虚函数是实现多态 动态绑定 接口函数的基础 可以说 没
  • 深度强化学习系列: “奖励函数”的设计和设置(reward shaping)

    概述 前面已经讲了好几篇关于强化学习的概述 算法 DPG gt DDPG 也包括对环境OpenAI gym的安装 baseline算法的运行和填坑 虽然讲了这么多 算法也能够正常运行还取得不错的效果 但是一直以来忽略了一个非常重要的话题 那
  • 篇六:线性查找

    线性查找 又称顺序查找 是一种最简单的查找方法 它的基本思想是从第一个记录开始 逐个比较记录的关键字 直到和给定的K值相等 则查找成功 若比较结果与文件中n个记录的关键字都不等 则查找失败 假设一个数组arr 23 98 56 76 38
  • 检验链表是否形成环

    以下两个方法只要是存在环快慢指针就一定相遇 1 快慢指针 2 fast先走K步 从第K个节点出发 gt gt 相当于在求倒数第K个节点 除了快慢指针 可以用记录步数是否相同 来判断是否会相遇 int has loop node t head
  • A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptExecution

    今天在编译Kotlin项目时 遇到以下错误信息 信息中没有具体指明错误原因 只是报错 A failure occurred while executing org jetbrains kotlin gradle internal KaptE
  • IP首部报文字段

    一 IP首部报文字段 字段如下图所示 二 每个字段的含义 版本 表示 IP 协议的版本 通信双方使用的 IP 协议版本必须一致 目前广泛使用的IP协议版本号为 4 即 IPv4 首部长度 这个字段所表示数的单位是 32 位字长 1 个 32
  • postgreSQL中无法更改数据的问题

    增对这个bug 参考博客 解决Navicat修改Mysql数据后刷新恢复原样的问题 无法提交事务 Studiouss的博客 CSDN博客 发现我的问题是解决了 因为我确实没有设置主键 或者是设置主键没有保存造成的 这样就解决了 点击刷新 表
  • 自动化测试面试题及答案大全(2)

    问题1 Selenium是什么 流行的版本有哪些 是一个开源的web自动化测试的框架 支持多种编程语言 支持跨浏览器平台进行测试 Selenium 1 0或Selenium RC Selenium 2 0或Selenium Webdrive
  • VisualStudio神级插件——JetBrains Resharper 2018.2.3 Ultimate完美破解版教程

    VisualStudio神级插件 JetBrains Resharper 2018 2 3 Ultimate完美破解版 教程 ReSharper是一个JetBrains公司出品的著名的代码生成工具 是Visual Studio里面的一个插件
  • 中职本科计算机大学课程设置,中职学校计算机专业课程设置问题与对策研究——以湖南省五所中职学校为例...

    摘要 随着我国市场经济的发展 产业结构和劳动力结构不断调整 因此对劳动者的素质和结构都提出了新的要求 形成了对技能型人才需求的调整增长态势 技能型人才的紧缺 结构性失业问题已成为制约我国经济增长的瓶颈 中职教育作为目前职业教育的主体 它承担
  • 文件服务器 安全,文件服务器 安全

    文件服务器 安全 内容精选 换一换 云堡垒机支持批量导出资源信息 用于本地备份资源配置 以及便于快速管理资源基本信息 为加强资源信息安全管理 支持加密导出资源信息 导出的主机资源文件中包含主机基本信息 主机下所有资源账户信息 主机资源账户明
  • linuxmake没有指明目标并且找不到makefile_Makefile笔记

    一般来说 无论是C C 还是pas 首先要把源文件编译成中间代码文件 在Windows下也就是 obj 文件 UNIX下是 o 文件 即 Object File 这个动作叫做编译 compile 然后再把大量的Object File合成执行
  • ssh 连接报错:Unable to negotiate with 192.168.xx.xx port 22: no matching key exchange method found.

    用 ssh 连接 Linux 服务器时 很偶然的情况下出现了如下报错 Unable to negotiate with xx xx xx xx port 22 no matching key exchange method found Th
  • LeetCode题目笔记--12.整数转罗马数字

    题目描述 题目跟前面13题描述一样 就是问题变为整数转成罗马数字 思路 上一道题罗马数字转整数比较简单 因为不存在罗马数字表示冲突的问题 即不存在一个罗马数字对应多个整数 而这个问题中 就要考虑一下这个问题了 因为如果不加以约束的话 一个整
  • 【设计模式】用Java实现状态模式

    一 状态模式介绍与使用场景 状态模式是一种行为设计模式 它允许对象在内部状态发生改变时改变其行为 该模式将对象的行为包装在不同的状态类中 使得对象的行为可以根据其当前状态动态改变 状态模式通常由以下几个角色组成 环境类 Context 环境
  • c++中的时间处理(1)localtime、localtime_r和localtime_s

    c 中对时间的处理有好几个函数 很多C 程序员可能用过 但不一定完全搞得清楚 这里 我先讲解下 localtime localtime r和localtime s的使用 1 localtime localtime用来获取系统时间 精度为秒
  • Python 3.4安装pandas库时遇到的问题:no matching distribution found for numpy==1.9.3

    Window XP 其实已经安装了numpy10 0 1 但在cmd中pip install pandas时提示 no matching distribution found for numpy 1 9 3 然后卸载了之前的numpy 又使
  • selenium3和selenium4的区别

    1 初始化浏览器对象 在初始化driver对象的时候 selenium4多了一个Service类 用来管理驱动程序的启动 停止 service Service r D python39 chromedriver exe driver web
  • 手写字符识别

    一 手写字符识别原理 以下来源网上 手写数字识别 可以采用图像识别的方法 左边的x是手写之后的图像 右边的y是对应的数字 对于图像信息 计算机是用数值来进行表示的 机器学习让计算机具备智能 实际上是训练出数值模型w对于新的输入x 可以通过与
  • STL容器总结

    1 Vector 本质是动态数组 拥有一段连续的内存空间 并且起始地址不变 能非常好的支持随机存取 即 操作符 但由于它的内存空间是连续的 所以在中间进行插入和删除会造成内存块的拷贝 如果空间不够 则另外分配新的两倍大小的空间 然后把旧空间