序列式容器

2023-11-16

容器的概观与分类

常用的数据结构不外乎array(数组)、list(链表)、tree(树)、stack(堆栈)、queue(队列)、hash table(散列表)、set(集合)、map(映射)等等。

根据"数据再容器中的排列"特性,这些数据结构分为序列式和关联式。


vector概述

vector的数据安排以及操作方式,与array非常相似。两者的唯一差别在于空间的运用的灵活性。array是惊呆空间。而vector是动态的。


vector的迭代器

vector维护的是一个连续线性空间。无论其元素型别为何,普通指针都可以作为vector的迭代器满足所有条件。支持各种运算。


vector的数据结构

vector所采用的数据结构非常简单:线性连续空间。它以两个迭代器start和finish分布指向配置得来的连续空间中已经被使用的范围。

一个vector的容量永远大于或等于其大小。增加新元素时,如果超过当时的容量,则容量会扩充至两倍。容量的扩张必须经历"重新配置。

元素移动、释放原空间"等过程。

vector缺省使用alloc作为空间配置器,并据此另外定义了一个data_allocator,为的是更方便以元素大小为配置单位。

vector的元素操作:pop_back, erase, clear, insert


list概述

相较于vector的连续线性空间, list就显得复杂许多,它的好处是每次插入或删除一个元素,就配置或释放一个元素空间。

因此,list对空间的运用有绝对的精准,一点都不浪费。而且,对于任何位置的元素插入或元素移除,list永远都是常熟时间。

list和vector是两个最常被使用的容器,什么实际下最适合使用哪一种容器,必须视元素的多寡,元素存取行为的特性耳钉。

list不能够像vector一样以普通指针作为迭代器。因为其节点不保证在存储空间中连续存在。


list有一个重要性质:插入操作和接合操作都不会造成原有的List迭代器失效。这在vector是不成立的。


可以更改alloc配置器,使链表变成双向链表。


list元素操作:push_front, push_back, erase, pop_front, pop_back, clear, remove, unique, splice, merge, reverse, sort


list这一部分真的是博大精深。让人看得欲罢不能。读者可以考虑自己看侯捷先生写的STL剖析。


deque概述

deque是一种双向开口的连续线性空间。可以在头尾两端分别做元素插入和删除操作。

deque和vector的最大差异:

1. deque允许常数时间内对头端进行元素插入或移除操作。

2.在于deque没有容量观念,因为它是动态地以分段连续空间组合而成,随时可以增加一段新的控件并链接起来。


deque的迭代器很复杂。

deque采用一块所谓的map作为主控。这里所谓map是一块连续空间。、,其中每个元素都是一个指针,指向另一端

连续的线性空间,称为缓冲区。缓冲区才是deque的存储空间主题。


deque是分段连续空间。维持其"整体连续"假象的人物,落在了迭代器的operator++和operator--两个运算子身上。


queue概述

queue是一种先进先出的数据结构。它有两个出口。queue允许新增元素、移除元素、从最低端加入元素、取得最顶端

元素。

这个结构用来做消息队列真的是太方便了。


queue没有迭代器。

queue是以list容器作为底层容器。


binary heap是一种完全二叉树。可以通过heap算法来排序。

heap没有迭代器。



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

序列式容器 的相关文章

随机推荐

  • ElasticSearch学习4--复杂查询

    1 查询分类 查询所有 查询出所有数据 一般测试用 例如 match all 全文检索 full text 查询 利用分词器对用户输入内容分词 然后去倒排索引库中匹配 例如 match query 根据单个字段查询 multi match
  • vue3学习—state的变化和使用

    sate的变化和使用 一 state的变化 1 reactive 1 什么是reactive 2 reactive注意点 2 state的类型 1 setup里面的vuex的使用方式 2 封装获取state方式 二 state使用 1 st
  • 《区块链技术与应用》学习笔记3——BTC共识协议

    1 数字货币中经常出现的问题 双花攻击 1 数字货币本身为带有签名的数据文件 可以进行复制 对于用户来说就可以花两次 2 解决 对货币添加唯一编号 每次支付向货币发行单位查询真伪 3 问题 货币发行单位是一个第三方机构 并且这是一个典型的第
  • el-table page翻页后保留所勾选项。

    项目场景 el table 翻页后保留所勾选项 问题描述 例如 刚开始还在使用原始的方式进行翻页回显 因为翻页之后 点选时selection会出现undefined 所以这里需要进行判断 这里可以通过判断选择selection中有没有row
  • Ubuntu 16.04下编译Caffe-CPU版最可靠完整的版本!!!!(踩了所有的坑,试了几乎所有方法)

    Ubuntu 16 04下编译Caffe CPU版最可靠完整的版本 踩了所有的坑 试了几乎所有方法 Introduction 我踩的坑 各种软件包的版本 GCC版本的确定与调整 一 相关依赖包的安装 二 caffe的下载 三 protobu
  • 文盘Rust -- FFI 浅尝

    rust FFI 是rust与其他语言互调的桥梁 通过FFI rust 可以有效继承 C 语言的历史资产 本期通过几个例子来聊聊rust与C 语言交互的具体步骤 场景一 调用C代码 创建工程 cargo new bin ffi sample
  • 【DFS和BFS习题集+分类总结】(更新至2023.1.1)(17788字)

    目录 第一题 八皇后 dfs 路径输出 前驱版 第一题的补充练习 N皇后 dfs 打表 第二题 自然数的拆分 第三题 图的遍历 BFS和DFS 第四题 fire net dfs 第五题 nightmare 可以走回头路的DFS 第六题 滑雪
  • 【漏洞修复】Diffie-Hellman Key Agreement Protocol 资源管理错误漏洞(CVE-2002-20001)

    CANCANJUN Diffie Hellman Key Agreement Protocol 资源管理错误漏洞 CVE 2002 20001 概述 漏洞名称 Diffie Hellman Key Agreement Protocol 资源
  • springMVC、freemarker页面半自动静态化

    1 请求 do的URL时直接生成对应的 htm文件 并将请求转发到该htm文件 2 自由控制某个页面是否需要静态化 如果看图不懂的呢 说白了这个中技术就是 java对象 ftl模型 输出html视图 1 在sprinMVC中 MVC框架中的
  • 【数据分析师自学系列-MySQL】创建新表create table、create table as、create table like的区别

    数据分析师自学系列 MySQL 创建新表create table create table as create table like的区别 1 create table 基本创建新表方式 格式如下 create table 新表名 列名1
  • java反射机制创建对象实现:java 深度拷贝 -超完美

    java反射机制创建对象实现 java 深度拷贝 超完美 自己做的 下面 package aop public class Student private String name private int age public String
  • 乘法逆元之欧几里得和扩展欧几里得

    乘法逆元 文章目录 乘法逆元 一 模运算的性质 二 除法的模运算 1 除法模运算 2 解决除法模运算问题 三 乘法逆元 1 定义 2 逆元是干什么的呢 四 求解逆元 1 费马小定理 2 扩展欧几里得 exgcd 1 裴蜀定理 2 exgcd
  • C语言问题:0xC0000005: 写入位置 0xFFFFFFCC 时发生访问冲突。

    最近系统地开始学习C语言 在使用VS2019中用scanf s为一串字符串赋值时 发生了错误 错误如下 0x7837EF8C ucrtbased dll 处 位于 Project2 exe 中 引发的异常 0xC0000005 写入位置 0
  • typora+阿里云OSS+PicGO进行图床设置

    typora 阿里云OSS PicGO进行图床设置 文章目录 typora 阿里云OSS PicGO进行图床设置 前言 crystal ball 一 阿里云OSS设置 satellite 1 进入 阿里云OSS官网 https www al
  • 解决刷新tagsview首页消失问题和引入path报错问题

    我的tagsview功能是用nuoyi源码 如果你的代码有tagsview功能直接找这个文件 如果没有这个功能可以参考nuoyi源码 重点参考以下文件 或者参考 通俗易懂 vue实现tagsview标签导航栏切换菜单功能 详细注释 都能看的
  • 原型聚类&&密度聚类&&层次聚类

    1 原型聚类 原型聚类算法假设聚类结构可以通过一组原型刻画 通常算法先会对原型进行初始化 然后对原型进行迭代更新求解 不同的原型表示和不同的求解方式会产生不同的算法 下面主要介绍三种典型的原型聚类算法 k 均值 学习向量量化 和 高斯混合聚
  • mybatis和spring的集成方法

    集成mybatis和spring 需要的步骤 1 新建maven项目 2 加入maven依赖 在pom xml加依赖 1 加入spring依赖
  • vscode 无法远程调试 xdebug

    launch json version 0 2 0 configurations name Listen for XDebug type php request launch port 9001 该端口不要和php fpm端口相同 path
  • Redis Streams做股票行情MQ?

    redis作为内存数据库 大多时候都是作为缓存来使用 但是因为有pub sub的存在 所以也可以做MQ来使用 做为MQ 它有两个严重的问题 1 无法持久化 2 没有ack机制 redis pub sub是一个要即时消费的MQ 如果消费晚了
  • 序列式容器

    容器的概观与分类 常用的数据结构不外乎array 数组 list 链表 tree 树 stack 堆栈 queue 队列 hash table 散列表 set 集合 map 映射 等等 根据 数据再容器中的排列 特性 这些数据结构分为序列式