1. 程式人生 > >C++ STL 堆(heap)的初始化及其正確使用

C++ STL 堆(heap)的初始化及其正確使用

#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;
}