第五讲:深入理解容器
主要用于了解stl各种容器的内部构造,熟悉使用c++容器,并了解其底层原理。
第五讲:深入理解容器
容器的结构再分类
- heap 和 priority_queue中有vector的结构
- stack 和 queue中有deque的结构
- set 和 map系列有rb_tree的结构
- unordered系列容器中有hashtable的结构
- 在c++11中:slist –> forward_list; hash_~ –> unordered_~。
深度探索list
list(环状双向链表)其本身是一个指针,指向一个node节点,其结构为两个指针(一个向前一个向后)+数据值
|
|
list的结构
- node的设计(GNU2.9):
|
|
- iterator的设计(GNU2.9):
|
|
G4.9相较于G2.9:
- 模版参数直有一个(易于理解)
- node结构有其parent
- node的成员的type比较精准
list的构造和内存管理
- 当我们以push_back()将新元素插入于list尾端时,此函数内部调用insert():
|
|
而其中重载的insert的源码:
|
|
由于list不像vector那样有可能在空间不足时做重新配置,数据移动的操作,所以插入前的所有迭代器在插入后都仍然有效!
list的元素操作
push_front(), push_back(), erase(), pop_front(), pop_back(), clear(), remove(), unique(),splice() merge(), reverse(), sort() unique()作用为移除相同的连续元素,移除到只剩一个 具体源码看《STL源码剖析》p136~p142
最后修改于 2022-04-08
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。