push_heap函数则是基于一个已经是heap的数据来添加元素,重新形成一个heap。这个函数的构造函数与make_heap函数的构造函数是一样的。
pop_heap函数则是在一个已经是heap的数据删除掉第一个元素,记住,它总是删除第一个元素!当这个函数删除了第一个元素之后,剩下来的数据元素重新排成heap。
最后一个就是sort_heap函数了。这个函数的两个构造函数与前面的函数的构造函数一样。那么这个函数的作用就是将一个heap输出为一个已序的序列,默认情况下是升序排列。
下面给出个代码来详细看看这几个函数的具体实例:
先看看实现吧:
//堆排序算法
#include "iostream"
#include "windows.h"
#include "algorithm"
#include "vector"
#include "iterator"
using namespace std;
int main()
{
vector<int> coll;
copy(istream_iterator<int>(cin),istream_iterator<int>(),back_inserter(coll));
//输出vector中的数据
cout<<"原vector中的数据:"<<endl;
copy(coll.begin(),coll.end(),ostream_iterator<int>(cout," "));
cout<<endl;
make_heap(coll.begin(),coll.end());//将区间内的元素转化成heap
cout<<"输出将vector排成heap后的数据:"<<endl;
copy(coll.begin(),coll.end(),ostream_iterator<int>(cout," "));
cout<<endl;
pop_heap(coll.begin(),coll.end());//去除heap中的下一个元素
coll.pop_back();
cout<<"输出pop的第一个元素:"<<endl;
copy(coll.begin(),coll.end(),ostream_iterator<int>(cout," "));
cout<<endl;
coll.push_back(17);
cout<<"输出添加了元素之后的heap:"<<endl;
push_heap(coll.begin(),coll.end());
copy(coll.begin(),coll.end(),ostream_iterator<int>(cout," "));
cout<<endl;
sort_heap(coll.begin(),coll.end());
cout<<"输出sort之后的不再是heap的数据:"<<endl;
copy(coll.begin(),coll.end(),ostream_iterator<int>(cout," "));
cout<<endl;
system("pause");
return 0;
}