STL容器结构与分类

容器的结构与分类

容器- 结构与分类

在这里插入图片描述

  1. 序列式容器 sequence
    1. array, c++11 不可扩容
    2. vector 向后扩容
    3. deque double-end queue 双端队列,前后均可扩充
    4. list 双向环状链表
    5. forward list, c++11 单向链表
  2. 关联式容器- associative : key-value ,大量的查找动作 底层是rb-tree 高度平衡BST
    1. set/multiset :value和key是一个东西
      1. multi 表示set里面的元素可以重复
    2. map/multimap 每个节点都是k-v
      1. Multi 表示map里面的元素可以重复
  3. 不定序容器 Unordered containers 底层是用hashtable, c++11
    1. unordered Set / MultiSet
    2. Unordered map / MultiMap
  4. Hash table - separate Chaining
    1. 如何处理碰撞?
    2. 设计哈希函数解决碰撞冲突
    3. 放在同一个bucket中,链表 Chaining
    4. 如果碰撞次数太多,重新打散…

1. array

在这里插入图片描述

testArray()...... 
5.324 ms
array.size()= 500000
array.front()= 6903
array.back()= 7938
array.data()= 0x7ffee249ee48
target ( 0 ~2147483647): 40
found 40
50.366 ms

2. vector

在这里插入图片描述

​ 使用namespace区分测试程序

​ vector 动态扩容:倍增策略 利用率 >= 50%

testVector()......
190.555 ms
vector.size()= 1000000
vector.front()= 16807
vector.back()= 83347
vector.data()= 0x7fc32d400000
vector.capacity()= 1048576
target ( 0 ~2147483647): 5000
::find(): 20.233 ms
found 5000
sort + bsearch: 1671.94 ms
found 5000

3. List

​ 双向循环链表

在这里插入图片描述

  1. 标准库的sort
  2. 某些容器自己提供了sort,效率要高一些

4. forward_list

在这里插入图片描述

  1. 注意头尾指针的位置
  2. push_front();
  3. 标准库提供的find 循序遍历查找
  4. 本身提供了sort成员函数

slist 是gun-c 提供的非标准库容器

#include <ext/slist> 

在这里插入图片描述

5. deque

​ double-end queue
在这里插入图片描述

  1. deque的结构: 分段连续
  2. deque 是如何扩容的?
    1. 分段扩容,每段扩容 buffer的大小
      在这里插入图片描述

stack

​ 使用deque适配成stack,其实是容器适配器
在这里插入图片描述

  1. 不会提供迭代器,因为会破坏容器的性质

queue

​ 使用deque适配成queue,其实是容器适配器

在这里插入图片描述

  1. 不会提供迭代器,因为会破坏容器的性质

multiset

​ 关联式容器

​ 允许插入重复元素

​ 底层由rbtree实现
在这里插入图片描述

  1. 容器提供的find接口比较快,使用了bst的性质
  2. 关联式容器,查找效率非常高
  3. 代价是插入时候要保证rbtree的性质,会进行调整
  4. size 为1000000, 因为允许重复值的出现

multimap

在这里插入图片描述

  1. 模版参数指定两个,一个是key的类型,一个是value的类型
  2. 标准库提供的模版类 ::pair <>
  3. Size 为1000000, 允许重复值存在

unordered_multiset

​ 底层是hash table
在这里插入图片描述

  1. 散列函数
  2. bucket
  3. load factor 装填因子

unordered_multimap

在这里插入图片描述

set

​ 不允许重复元素插入
在这里插入图片描述

  1. 观察容量

map

​ 不允许重复key插入
在这里插入图片描述

  1. 观察容量 1000000?
  2. 看一下如何插入的,使用的是[] 插入 key不会重复,只有value重复,所以全部放进去了

priority_queue

使用heap实现,建堆算法

容器的结构与分类

​ 都不是通过继承的方式实现的。
在这里插入图片描述

​ 一个容器想要使用另一个容器的功能:

  1. 继承
  2. 复合 : 整个STL尽量少的使用了继承
  3. 委托
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值