【C++知识】浅谈STL中各种容器

浅谈STL中各种容器

目录

浅谈STL中各种容器

1、STL六大部件

2、容器分类

3、各种容器介绍

vector

deque

list

set/map

unordered_map/unordered_set

1、STL六大部件

容器、分配器、算法、迭代器、适配器、仿函数

2、容器分类

  • Sequence Containers
  • Associative Containers:set/map 红黑树,用于查找速度快
  • Unordered Containers:哈希表

3、各种容器介绍

vector

     底层就是一段连续的数组,成长空间以两倍增长,当内存不够时,会另外找一片空间,进行搬移,即先拷贝数据,再释放原先空间,但并没有销毁原先内存空间,只是清除了原先内存中的数据。会有空间浪费,支持随机访问。由于本身就是一段连续空间,所以iterator就是一个单纯的指针而已。

deque

    分段有序,每次扩充是以一个buffer进行扩充。 

对于deque中的iterator,由于deque实质上并不是连续的空间,所以不能仅仅只是一个指针,而是一个class类,在class中,有四个指针,cur(buffer中的当前位置)、first(buffer的头)、last(buffer的尾)、node(buffer在map中的位置),至于关于iterator的++等操作,就是进行操作符的函数重载而已,使整个过程看似是一个连续的过程。

insert时,需要比较和前端近还是和后端比较近,则是搬移前端还是搬移后端。 

list

    G4.9:本身是一个指针,每个节点有两个指针(指向自己的指针)。双向环状,最后一个加一个空白节点,为了符合STL的前闭后开原则。

 关于链表的节点,最好的结构就是嵌入式指针结构,用数据域前多少个字节充当指针用于串联起整个链表。同样地,iterator也不只是单纯的指针,而是一个class类,里面也有大量的运算符重载。

不支持随机访问。

 set/map

     底层均以红黑树实现,具有排序功能,对于set,key就是value,直接以value进行排序,而map,既有key,也有value,对于key是不能修改的,所以设置成const,排序也是根据key进行排序的。

     特点:1)插入速度较快,因为没有数据拷贝和移动,2)当insert数据后,之前保存的iterator不会失效,因为插入操作只是节点换来换去,节点内存没有改变,而iterator就像指向内存的指针,内存没变,指向内存的指针自然不会变。3)map/set的查找速度也较快,是基于二分查找的。

unordered_map/unordered_set

    底层是哈希表结构,查找基本上是常数级别。 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

烊萌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值