STL的is heap演算法

2021-05-12 20:41:20 字數 638 閱讀 7057

前兩天在看austern的generic programming and stl,看到關於堆的操作,其中有個函式是is_heap,其複雜度是last - first +1,我沒有仔細去看過stl的源**,就自己想想stl的實現。

由於堆從邏輯上講是一棵完全二叉樹,因此自然而然就想到用遞迴。我就簡單的寫了下面的用遞迴判斷堆的演算法。

bool isheap2(int *arr, int pos, int size)

}else

}    

return true;

}但是仔細分析了一下,覺得stl的實現應該效率更高,我想不會用遞迴。就去vc 6看看,結果發現vc6中的stl居然沒有is_heap,這簡直是...,又去linux下看看sgi的stl實現,發現確實stl的實現更高效。我就按照stl的實現寫了個簡單版本。

bool isheap(int *arr, int size){

int parent = 0;

for (int child = 1;child而且這裡迴圈體中的自增都採用的是字首自增,用字首自增比字尾自增少進行一次記憶體的分配和物件的構造、析構和拷貝構造,效率更高。尤其是當資料量很大的時候,這會產生顯著的效果。

從這個stl的演算法其實我們可以擴充套件到n叉樹,採用一種比較靈活的辦法來獲取其n個兒子。

STL的移動演算法

要在自定義型別中使用移動演算法,需要在元素中提供移動賦值運算子,移動賦值運算子和std move 詳見 c 高階程式設計 第9章 class mystring mystring const string str mstr str mystring operator mystring rhs 移動賦值...

STL的移動演算法

要在自己定義型別中使用移動演算法。須要在元素中提供移動賦值運算子。移動賦值運算子和std move 詳見 c 高階程式設計 第9章 class mystring mystring const string str mstr str mystring operator mystring rhs 移動賦...

STL 演算法細節

一 概論 1 質變演算法 會改變操作物件的值 2 非質變演算法 不改變操作物件的值 3 所有泛型演算法的前兩個引數都是一對迭代器 二 演算法的泛化過程 1 將乙個敘述完整的演算法轉化為程式 是任何訓練有素的程式設計師勝任愉快的工作。2 泛化是乙個漸進過程,從具體到抽象的過程。3 迭代器是乙個行為類似...