C++ STL 堆(heap)的初始化及其正確使用
阿新 • • 發佈:2019-02-17
#include <iostream> #include <vector> #include <algorithm> #include <iterator> using namespace std; int main() { vector<int> v1; double dim[]={1,2,3,4,5,6,8,7}; int cnt=sizeof(dim)/sizeof(double); v1.assign(dim,dim+cnt); //初始化v1 copy(v1.begin(),v1.end(),ostream_iterator<int>(cout,",")); //顯示v1 cout<<endl; make_heap(v1.begin(),v1.end()); //建立堆,v1成為了堆 copy(v1.begin(),v1.end(),ostream_iterator<int>(cout,",")); //顯示堆 cout<<endl; pop_heap(v1.begin(),v1.end()); //將堆的最大值調整到最後 copy(v1.begin(),v1.end(),ostream_iterator<int>(cout,",")); //顯示堆 cout<<endl; v1.pop_back(); //彈出v1中最後的元素(即堆中的最大值) copy(v1.begin(),v1.end(),ostream_iterator<int>(cout,",")); //顯示堆 cout<<endl; v1.push_back(11); //插入元素 push_heap(v1.begin(),v1.end()); //改變插入元素的位置,使其符合堆的定義 copy(v1.begin(),v1.end(),ostream_iterator<int>(cout,",")); //顯示堆 cout<<endl; sort_heap(v1.begin(),v1.end()); //對堆中元素進行排序,結束後v1就不再是堆了 copy(v1.begin(),v1.end(),ostream_iterator<int>(cout,",")); //顯示,vector已經不是堆了 cout<<endl; return 0; }