#include #include #include // heap algorithms
using namespace std;
// heap的所有元素都必須遵循特別的完全二叉樹排列規則,所有heap不提供遍歷功能,也不提供迭代器
int main()
; vectorivec(ia, ia + 9);
for (int i = 0; i < ivec.size(); ++i)
cout << ivec[i] << ' ';
cout << endl;
make_heap(ivec.begin(), ivec.end());
for (int i = 0; i < ivec.size(); ++i)
cout << ivec[i] << ' ';
cout << endl;
ivec.push_back(7);
push_heap(ivec.begin(), ivec.end());
for (int i = 0; i < ivec.size(); ++i)
cout << ivec[i] << ' ';
cout << endl;
pop_heap(ivec.begin(), ivec.end());
cout << ivec.back() << endl; // 9 返回但是不移除
ivec.pop_back(); // 移除最後乙個元素,不返回
for (int i = 0; i < ivec.size(); i++)
cout << ivec[i] << ' ';
cout << endl;
sort_heap(ivec.begin(), ivec.end());
for (int i = 0; i < ivec.size(); ++i)
cout << ivec[i] << ' ';
cout << endl;
make_heap(ivec.begin(), ivec.end());
for (int i = 0; i < ivec.size(); ++i)
cout << ivec[i] << ' ';
cout << endl;
}
輸出:
// test heap (底層以array完成)
int ia[9] = ;
make_heap(ia, ia + 9);
for (int i = 0; i < 9; ++i)
cout << ia[i] << ' ';
cout << endl;
// 經排序之後的heap,不再是乙個合法的heap
// array無法動態改變大小,因此不可以對滿載的array進行push_heap()操作
// 因為那得先在array尾端增加乙個元素。如果對乙個滿載的array執行
// push_heap(), 該函式會將最後乙個元素視為新增元素,並將其餘元素視為乙個
// 完整的heap結構(實際上它們的確實), 因此執行後的結構等於原先的heap
sort_heap(ia, ia + 9);
for (int i = 0; i < 9; ++i)
cout << ia[i] << ' ';
cout << endl; // 經排序之後的heap,不再是乙個合法的heap
// 重新再做乙個heap
STL原始碼解析 sort heap
模板函式sort heap具有如下兩個版本 templatevoid sort heap ranit first,ranit last templatevoid sort heap ranit first,ranit last,pr pred 其功能是完成區間 first,last 內元素的堆排序,...
STL原始碼 heap最大堆,最小堆
最大堆和最小堆都是一棵完全二叉樹。最大堆 是指根節點的關鍵字值是堆中的最大關鍵字值,且每個節點若有兒子節點,其關鍵字值都不小於其兒子節點的關鍵字值。最小堆 是指根節點的關鍵字值是堆中的最小關鍵字值,且每個節點若有兒子節點,其關鍵字值都不大於其兒子節點的關鍵字值。步驟 把當前節點數i設定為已知堆的節點...
Spring原始碼解析之 Aop原始碼解析(2)
spring aop 更多的是oop開發模式的乙個補充,幫助oop以更好的方式來解決對於需要解決業務功能模組之上統一管理 的功能 以一副圖來做為aop功能的說明更直觀些。對於類似系統的安全檢查,系統日誌,事務管理等相關功能,物件導向的開發方法並沒有更好的解決方法 aop引入了一些概念。更多的是spr...