【STL】vetor+list+map原理--简单笔记


vector原理:
[
动态数组,连续内存,用3个指针控制,一个指向开始,一个指向结束,一个指向已用的结尾
首先分配固定内存,用于存放数据;当新加入数据超过内存大小时,vector会重新分配一块更大的内存,然后把
之前的内容拷贝到新的vector种,然后把旧的删除,所以有时会出现迭代器失效,就是因为旧的删除了,解决办法
是给迭代器重新赋值,即指向新的vector

说明:vector扩容大小与编译器有关,不同编译器不一样,但肯定是变大的
]

list原理:
[
链表,而且是双向链表,内存是不连续的 

链表,包含[头+各个node]
]

map原理:
[
红黑树,源码上继承的就是红黑树

树:父节点,左子树,右子树

红黑树特点:
红黑树是一种含有红黑结点并能自平衡的二叉查找树
最上面的根节点是黑色,黑节点下面是任意的,红节点下面一定是2个黑色
任意一结点到每个叶子结点的路径都包含数量相同的黑结点,所以我们叫红黑树这种平衡为黑色完美平衡

 

说明:
map删除会导致迭代器失效,怎么办?
给迭代器重新赋值,用erase返回值赋值

]

------------------
从内存看,
vector内存是连续的,list和map内存不是连续的

轮询方法:
vector,正常轮询,简单
list,链表的轮询
map,红黑树的轮询,

3种内存结构:
连续内存           
链表类型         --增删改查    --提示:[头+各个node]
树类型            --增删改查    --提示:父节点,左子树,右子树

树的轮询:
                                    从根节点开始
                                             ↓
    ->------------------- 设置当前节 -----------------------------------<-                                                 
    |                                         ↓                                                          |
 向左子树查找         判断当前节点是否为空?->是->返回null         向右子树查找
   ↑                                        ↓否                                                        ↑
    |                                    key相等 ->是->返回当前节点                      |
    |                                        ↓否                                                        |
---------------------------当前Key较大?-----------------------------------


 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值