數據結構的的原理及實現,這裏講的很好http://blog.csdn.net/morewindows/article/details/6709644
而關於STL中的堆的使用Morewindows講的也不錯http://blog.csdn.net/morewindows/article/details/6967409
但是其中存在幾個小問題:
1.vector<int> *pvet = new vector<int>(40);
沒有必要申請40的空間,20足矣。
2.int a[MAXN];pvet->assign(a, a + MAXN);會將空間設置回20,看來assign函數還是挺厲害的。
3.如果需要小根堆,則需要自己寫函數
bool cmp(int a,int b)
{
return a>b;
}
make_heap(pvet->begin(), pvet->end(),cmp); //之後每次使用都需要加入cmp否則運行時錯誤
pvet->push_back(25);
push_heap(pvet->begin(), pvet->end(),cmp);
pop_heap(pvet->begin(), pvet->end(),cmp);
pvet->pop_back();
sort_heap(pvet->begin(), pvet->end(),cmp); //但對這一句沒用,排序結果總是升序的。