IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 工作准备06-STL容器 -> 正文阅读

[数据结构与算法]工作准备06-STL容器

STL容器

序列式容器

1.vector

** vector内部**
在这里插入图片描述
vector较常使用的成员函数有:begin()、end()、size()、capacity()、empty()、operator[]、front()、back()…
vector在进行两倍扩充的时候需要大量调用析构函数和构造函数,因为它要释放之前空间中申请的空间,并且需要重新开辟空间去存放新放入的元素。
GUN4.9版本中vector容器的内部构造如下:
在这里插入图片描述
可以看出vector迭代器占12个字节(内部有三个指针)。

2.array

TR1中的array内存模型:
在这里插入图片描述
在这里插入图片描述

3.forward_list

forward_list是一个单向链表,在GUN4.9新加进来的:
在这里插入图片描述

deque

在这里插入图片描述
如上图所示,deque分段连续。
deque的控制中心是一个vector,所以其扩充是和vector扩充方式一样,两倍扩充。

在这里插入图片描述
deque的迭代器大小有16个字节。
deque本身有40个字节。
deque成员函数insert()内部判断插入位置点离起始点和结束点哪个比较近,之后插入传入迭代器中的位置中。
deque的迭代器++和–操作重载如下:
在这里插入图片描述
GUN4.9中定义deque:
在这里插入图片描述

stack和queue

在这里插入图片描述
stack和queue都是通过底层调用deque来实现自己的功能的。
stack和queue不能遍历,也不提供iterator。
stack和queue不仅可以使用deque作为底层也可以使用list作为底层使用,但是不能使用vector、set、map作为底层进行构造。

关联式容器

关联式容器的查找和安插数据都很快,因为其底层实现决定了这些特性都很快。
关联式容器底层有两种实现方式:rb-tree和hash table。

rb-tree

rb tree是平衡二叉搜索树。
GUN2.9版本rb tree实现:
rb-tree有12个字节
在这里插入图片描述
GUN4.9版本实现:
每个rb-tree有24个字节
在这里插入图片描述

set/multiset

在这里插入图片描述
set容器底部源码:
在这里插入图片描述
因为set和multiset底层使用rb-tree来进行实现功能,所以我们可以称其为容器适配器(container adapter)。
multiset容器气势上与set差不多,但是其底层的插入是使用insert_equal()来实现的,所以其可以插入key值相同的元素。

容器map、multimap

在这里插入图片描述
map底层实现:
在这里插入图片描述
map通过[]进行查询元素时,如果map里面存在这个索引值对应的元素,则返回这个元素的迭代器,如果map里面不存在此元素,则将此索引值按照一个元素值插入到map中。

hashtable

一开始的时候是按照左上方的方式实现hashtable的,但是如果同一个链表下的元素过多的时候查找的时候速度会特别的慢,所以有了如下调整:在元素的个数大于等于篮子的个数的时候需要重新rehashing,大散散列表重新进行计算并排列元素,一般扩充篮子的数量是质数(这里起始是53(按照平台不同而不同),以后就是扩充到53倍数最近的一个质数,也就是右上角的个数,这些数字是在GUN2.9版本下)。
在这里插入图片描述
hashtable的底层实现为:
在这里插入图片描述

unordered

到了C++11之后hashtable容器改名为unordered,如:hash_set、hash_multiset、hash_map、hash_multimap------>unordered_set、unordered_multiset、unordered_map、unordered_multimap。
下面测试是在GUN4.9版本下:
在这里插入图片描述
容器的内容就以上这么多了,以上截图都是侯捷老师网课的内容。

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-08-25 12:27:44  更:2021-08-25 12:30:11 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 23:49:36-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码