stl upper bound函式實現

2021-08-25 07:13:52 字數 1328 閱讀 3097

寫了乙個upper_bound的實現。其中遞迴使用二分法求解最上界,雖然寫的完全不像stl的風格,但是練手還是可以的。

#include#include#include#includeusing namespace std; int upperbound(int* a, int start, int end , const int& value) else if(a[mid]如果原陣列中沒有存在那個元素,就根本沒有呼叫那個遞迴程式,遞迴只有在出現多個此元素時才會呼叫。另外中間遞迴呼叫段地方還可以改寫為:

if(a[mid] == value)

這樣寫完後寫一下測試**,順便wrap一層upper_bound:

int upper_bound(int * a,int n, const int& value) int * tmp_a = new int[n]; memcpy(tmp_a,a,sizeof(int)*n); #endif int index = upperbound(a,0,n-1,value); #ifdef test // post-condition //check whether the array is changed or not for(int i = 0; i < n; i++) assert(a[i] == tmp_a[i]); if(index == 0) else if(index == n) else delete tmp_a; #endif return index; }

如果希望別人不呼叫upperbound而只呼叫upper_bound,可以使用static 關鍵字, 將upperbound限制在只在本檔案中使用。別人呼叫就只能呼叫upper_bound()函式。不過stl的教學原始碼比我這精簡的多,根本無須使用遞迴。真正的stl原始碼變數名稱會使用下劃線__作為起始。

template forwarditerator upper_bound ( forwarditerator first, forwarditerator last, const t& value ) else count=step; } return first; }

這裡的advance()函式定義類似:

templatevoid advance(iterator& i, distance n); 類似於 i = x.begin()+n; i is an iterator of x

最後把主函式貼上做結:

int main(int argc, char* argv) ; vectorv(x,x+9); sort(v.begin(),v.end()); cout << (int)(upper_bound(v.begin(),v.end(),9)-v.begin()); cout << upper_bound(x,9,9); return 0; }

stl upper bound函式實現

寫了乙個upper bound的實現。其中遞迴使用二分法求解最上界,雖然寫的完全不像stl的風格,但是練手還是可以的。如果原陣列中沒有存在那個元素,就根本沒有呼叫那個遞迴程式,遞迴只有在出現多個此元素時才會呼叫。另外中間遞迴呼叫段地方還可以改寫為 這樣寫完後寫一下測試 順便wrap一層upper b...

函式基礎 匿名函式,函式,箭頭函式,立即執行函式

doctype html html lang en head meta charset utf 8 meta name viewport content width device width,initial scale 1.0 title document title head body body ...

函式 常見函式

def fib n if n 1 return 1if n 2 return 1return fib n 1 fib n 2 def hannuo n,a,b,c n 表示有n個盤子 a 代表第乙個塔,開始的塔 b 代表第二個塔,過渡塔 c 代表第三個塔,目標塔 d.在 中n 2,這個分支可以不要,...