C++ STL学习之stack、queue、heap
1.stack实现思路
(1)STL中stack的实现是以deque为底层容器而进行修改实现的,因此,stack一般称为容器适配器(adapter)(修改某物接口,形成另一种风貌的模式为适配器模式)。除了deque作为底层容器外,list也可以作为stack的底层实现容器,用法为stack<int,list
(2)stack没有迭代器(只能满足先进后出的性质,所以不需要迭代器)
2. queue实现思路
同stack
3.heap(用于实现优先队列的幕后助手)
(1)隐式表示法:用数组表示树结构,如完全二叉树可以由数组来表示
(2)heap实质是一种满足某种限制条件的完全二叉树,分为大根堆和小根堆两种。
(3)heap的实现主要是用vector(用于二叉树的隐式表示)和一组heap算法来实现
(4)STL中的heap是以数组形式的max-heap实现的
(5)max-heap的性质(以数组标示):数组第一个元素预留出来不用,数据从i下标开始存储,则满足a[i] > a[2i] && a[i] > a[2i+1]
4.heap算法
(1)push_heap算法:插入数组底部,然后循环和父节点比较,调整max-heap结构。
(2)pop-heap算法
(3)sort-heap算法(堆排序)、make-heap算法
图省略,参考堆排序思路。
5.priority_queue(优先队列)
(1)定义及操作:优先队列是一个拥有权值观念的queue,允许像queue一样,即只允许低端加入,顶端取出操作;由于其带有权值,所以里面的元素自动以权值大小进行排序,权值高的,排在前面。
(2)priority_queue的底层容器为vector+heap操作(默认情况),也可以说是以max-heap为底层容器