码迷,mamicode.com
首页 > 其他好文 > 详细

《STL源码剖析》读书笔记之序列式容器(3)

时间:2015-03-06 16:35:21      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:stl   源代码   

1.heap

     heap不属于STL容器组件,它是priority queue的底层实现机制。

(1)push_heap算法

     向堆中加入元素,首先将要加入的元素放到堆所在数组的末端,然后再对这个元素进行上溯操作,直到新堆合法为止。如下图所示:

技术分享

(2)pop_heap算法

     pop_heap操作取走堆中的最大(小)值。根据堆的特性,堆的最大(小)值必定是堆所存数组的第一个元素。取堆的最大(小)元素时,将堆的最后一个元素和堆的第一个元素互换,然后再对第一个元素进行下溯操作,直到新堆满足堆的定义。下图给出的是一个例子:

技术分享

(3)sort_heap算法

     每次pop_heap操作都能取得heap的最大(小)值,则持续的对heap进行pop_heap操作,直到heap为空时,便得到了heap的有序序列。其过程如下所示:

技术分享

技术分享


2.priority_queue

     顾名思义,priority_queue表示优先队列。STL里面的priority_queue默认由heap来完成,后者是一个vector存储complete binary tree。

     priority_queue的完整定义如下:

技术分享


《STL源码剖析》读书笔记之序列式容器(3)

标签:stl   源代码   

原文地址:http://blog.csdn.net/yao_wust/article/details/44100751

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!