stl源码剖析学习笔记(一)重点数据结构概览
2016-03-14 14:31
323 查看
stl源码剖析学习笔记(一)
本系列都是基于SGI STL.
1、vector
线性连续空间 capacity() size() empty()。 对vector的任何操作,一旦引起空间重新配置,指向原vector的所有迭代器就都失效了
capacity()的实现是return size_type(end_of_storage - begin());
size()的实现是return size_type(end()-begin());
empty()的实现是return begin()==end();
end() return finish;
begin() return start;
begin() end()符合stl的前闭后开规范
2、list
双向循环链表
3、deque
双向开口‘连续’空间 其连续性是通过很多个map指针映射小块连续内存区域保证的,假连续。决定了其修改操作效率极低。连基本的排序,最好都先拷贝到vector中排序号再拷回来。应用场合?
4、stack、queue
stack先进后出,queue先进先出,结构连续简单。其底层结构是sequence
5、heap(不是stl的容器组件,是幕后英雄)
找list中的极值,需要线性扫描list。stl用的是完全二叉树,而且是大顶堆。
此处可以引入堆的push、pop和sort算法介绍。
heap相关的push、pop和sort操作全部都在algorithm头文件内。
前五个均称为序列式容器,可序的,对序列性有一定需求。
关联式容器是Key-Value方式访问,对序列性无需求。
1、平衡二叉树/***L树
2、红黑树
3、set/map/multiset/multimap
4、hashtable/hashset/hashmap/hashmultiset/hashmultimap
本系列都是基于SGI STL.
1、vector
线性连续空间 capacity() size() empty()。 对vector的任何操作,一旦引起空间重新配置,指向原vector的所有迭代器就都失效了
capacity()的实现是return size_type(end_of_storage - begin());
size()的实现是return size_type(end()-begin());
empty()的实现是return begin()==end();
end() return finish;
begin() return start;
begin() end()符合stl的前闭后开规范
2、list
双向循环链表
3、deque
双向开口‘连续’空间 其连续性是通过很多个map指针映射小块连续内存区域保证的,假连续。决定了其修改操作效率极低。连基本的排序,最好都先拷贝到vector中排序号再拷回来。应用场合?
4、stack、queue
stack先进后出,queue先进先出,结构连续简单。其底层结构是sequence
5、heap(不是stl的容器组件,是幕后英雄)
找list中的极值,需要线性扫描list。stl用的是完全二叉树,而且是大顶堆。
此处可以引入堆的push、pop和sort算法介绍。
heap相关的push、pop和sort操作全部都在algorithm头文件内。
前五个均称为序列式容器,可序的,对序列性有一定需求。
关联式容器是Key-Value方式访问,对序列性无需求。
1、平衡二叉树/***L树
2、红黑树
3、set/map/multiset/multimap
4、hashtable/hashset/hashmap/hashmultiset/hashmultimap
相关文章推荐
- 2.0新版本对数据结构进行了大幅修改:
- 数据结构与算法面试题80道(30)
- 堆排序(绝对详细)
- 栈的应用—平衡符号
- 数据结构与算法面试题80道(29)
- 数据结构第一次上机实践
- 数据结构笔记-----队列
- [转载] SBT(Size Balanced Tree)
- 数据结构(4)线性表之链式表示
- 数据结构(2):链表
- 实现栈的逆序 递归 不申请额外的数据结构
- 线性结构
- 数据结构之邻接表
- 通用树的存储结构
- 《大话数据结构》学习记录2--第3章的单链表
- 数据结构――广义表
- 数据结构笔记-----递归与栈
- 数据结构与算法系列----Sparse Table算法(RMQ问题)
- 并查集
- 数据结构与算法面试题80道(28)