参考文章:《STL源码剖析》 侯捷 译;
C++STL算法提供make_heap, push_heap和pop_heap等算法,它们作用于随机存取迭代器。它们将迭代器当做数组的引用,并做出array-to-heap的转换。STL中默认这个算法为最大堆(max_heap)。
make_heap
make_heap 的功能是将一段现有的数据转化成一个heap(堆)。默认状态下,它会生成一个最大堆结构,我们也可以自己定义为最大堆或者最小堆。我们先看它的定义:
定义1:(默认状态)
template <class RandomAccessIterator>//模板参数
void make_heap ( RandomAccessIterator first, RandomAccessIterator last );
我们可以看到,定义1有两个参数,参数为模板类型的迭代器。作用为当我们传一个左闭右开区间[first,last)时,它会自动把这个区间的数据转化成一个最大堆。
定义2:(传compare)
template <class RandomAccessIterator, class Compare>
void make_heap ( RandomAccessIterator first, RandomAccessIterator last,Compare comp );