Part6 使用STL程式設計總結

2021-07-15 03:47:00 字數 1911 閱讀 1142

count,find用於乙個無序的容器集合內。

count返回是否存在這個值,如果有,那麼有多少個?

find則用於考慮「是否存在這個值,如果有,那麼第乙個在哪兒?」找到後立即會返回。

所有,兩個的方法的用處不一樣,find的效率會高於count,因為它是找到後就立即返回。

從無序區間遷移到有序區間導致了另乙個遷移,從使用相等來判斷兩個值是否相同到使用等價來判斷。count和find都是用相等來搜尋,而binary_search,lower_bound,upper_bound,equal_range則是用等價。

要測試在乙個有序區間是否存在乙個值,使用binary_search,binary_search只返回乙個bool:這個值是否找到。

如果你需要在乙個有序區間找到那個元素的位置,你需要equal_range或者lower_bound。

當你用lower_bound來尋找乙個值的時候,它返回乙個迭代器,這個迭代器指向這個值的第乙個拷貝或者是可以插入這個值的位置。因此,lower_bound適用於這種情況「他在嗎,如果是,第乙個拷貝在哪兒?如果不在,那麼他將要在哪兒」。對於lower_bound的返回值,你需要進行檢測,不能只是檢測返回值是否等於end迭代器,還必須檢測這個迭代器的值是否是你需要的值。就像這樣子:

vector

::iterator it = lower_bound(vw.begin(),vw.end(),w);

if(it!=vw.end()&&*it==w)

else

//沒找到

大部分情況這是行得通的,但不是真的完全相同。這是一樣相等測試,但是lower_bound搜尋用的是等價。

有乙個更簡單的方法,使用equal_range。equal_range返回一對迭代器,第乙個等於lower_bound返回的迭代器,第二個等於upper_bound返回的。對於equal_range的返回值,如果這兩個迭代器相同,就意味著物件的區間是空的;這個只沒有找到。這個結果是用equal_range來回答「它在嗎?」這個問題的答案。使用distance處理equal_range返回的兩個迭代器pair,能夠計算出有多少個相同的元素。

**你可以這麼用:

vector

wints;

wints.reserve(10);

wints.push_back(10);

wints.push_back(20);

wints.push_back(50);

wints.push_back(60);

wints.push_back(30);

wints.push_back(40);

wints.push_back(90);

wints.push_back(80);

wints.push_back(70);

wints.push_back(100);

sort(wints.begin(),wints.end(),greater());

//wints = [10](100,90,80,70,60,50,40,30,20,10)

vector

::iterator it = lower_bound(wints.begin(),wints.end(),11,greater());

if (it!=wints.end()&&*it==20)

typedef

vector

::iterator vintiter;

typedef pairvintiterpair;

vintiterpair p = equal_range(wints.begin(),wints.end(),20,greater());

if (p.first!=p.second)

distance(p.first,p.second);//找到的元素個數

程式設計練習 part6

題目 小東所在公司要發年終獎,而小東恰好獲得了最高福利,他要在公司年會上參與乙個 遊戲,遊戲在乙個6 6的棋盤上進行,上面放著36個價值不等的禮物,每個小的棋盤上面放置著乙個禮物,他需要從左上角開始遊戲,每次只能向下或者向右移動一步,到達右下角停止,一路上的格仔裡的禮物小東都能拿到,請設計乙個演算法...

Makefile完全解析PART6 使用條件判斷

使用條件判斷,可以讓make根據執行時的不同情況選擇不同的執行分支。條件表示式可以是比較變數的值,或是比較變數和常量的值。一 示例 下面的例子,判斷 cc 變數是否 gcc 如果是的話,則使用gnu函式編譯目標。libs for gcc lgnu normal libs foo objects if...

物件導向 part6 繼承

js實現的是實現繼承 也就是繼承實際的方法 主要依賴 原型鏈 基本思路 就是乙個引用型別繼承另乙個引用型別的屬性和方法 詳細 建構函式,例項,原型之間的關係。每個建構函式都有乙個原型物件,原型物件都包含乙個指標指向建構函式 每個例項都包含乙個內部指標指向原型。假如我們讓乙個原型物件等於寧乙個型別的例...