容器find if函式定義和其第三個引數過載的疑問

2022-09-03 16:36:10 字數 2683 閱讀 7611

簡單明瞭,這個是cpluscpus 對find_if的定義:

123

456

template

inputiterator find_if ( inputiterator first, inputiterator last, predicate pred )

【例1】對第三引數的處理例子,第三引數就是一函式名。。。

class cperson

public:

int age; // 年齡

};struct finder_t

bool operator()(cperson *p)

int age;

};int main(void)

else // 沒找到

find_if是乙個模板函式,接受兩個資料型別:inputitearator迭代器,predicate用於比較數值的函式或者函式物件(仿函式)。find_if對迭代器要求很低,只需要它支援自增操作即可。當前遍歷到的記錄符合條件與否,判斷標準就是使得pred()為真。至此可能還有些不是很明了,下面舉幾個例子實際操練下的它的用法。

2 -- find_if在std::map查詢時的應用

假如我們有個map物件是這麼宣告的:

std::map my_map;

my_map.insert(std::make_pair(10, "china"));

my_map.insert(std::make_pair(20, "usa"));

my_map.insert(std::make_pair(30, "english"));

my_map.insert(std::make_pair(40, "hongkong"));

#include

<

map>

2 #include

<

string

>

3 4 

class

map_finder

5 8 

booloperator

()(const

std:

:map

<

int,

std:

:string

>::

value_type

&pair)

9 12 

private:

13const

std:

:string

&m_s_cmp_string;

14 }

;15 

16int

main()

17 class map_finder即用於比較的函式物件,它的核心就是過載的()運算子。因為每個容器迭代器的*運算子得到的結果都是該容器的value_type值,所以該運算子的形參就是map迭代器指向的value_type型別的引用。而map的value_type到底是什麼型別,就得看下stl的源**是如何定義的。

template

class map

;

從上面的定義可以看出,map的value_type是std::pair型別,它的first值就是關鍵字,second值儲存map的值域。

3 -- find_if在std::vector的應用

vector的find_if用法與map的很相似,區別僅僅是二者的value_type不一樣而已。我們看下vecotr對value_type的定義。

template

class vector

;

可以看出vector的value_type就是容器的值型別,了解了這點,我們做個vector的find_if示範。

1 #include

<

vector

>

2 #include

<

string

>

3 4 

struct

value_t5 ;

9 10 

class

vector_finder

11 14 

booloperator

()(const

std:

:vector

<

struct

value_t

>::

value_type

&value)

15 18 

private:

19int

m_i_a;

20 }

;21 

22 23 

int

main()

24 來自網路整理。。。find原型和使用方法!

map和set容器自定義比較函式

將元素插入map和set中時,容器會根據設定的比較函式將該元素放到相應節點上,在定義容器時,如果沒有指定比較函式,那麼採用預設的比較函式,及按照鍵值由小到大的順序插入元素,很多情況下,需要自己編寫比較函式,map和set內部的資料結構都是紅黑樹,所以比較函式是一致的,編寫方法有兩種 1 如果元素不是...

第16天 函式的定義和呼叫

函式 1 函式,是一種封裝。就是將一些語句,封裝到函式裡面。通過呼叫的形式,執行這些語句。2 函式如果不呼叫,等於白寫。3 函式實參和形參個數要相同。4 函式可以沒有return語句,如果有,只能有乙個。一些簡單的函式如下 1 doctype html 2 html lang en 3 head 4...

malloc和relloc函式的作用和其注意事項

malloc和relloc函式都需要標頭檔案 malloc函式模型 void malloc size t size malloc 會在堆上分配連續的空間。堆中空間沒用名字,只能用指標使用。malloc函式返回的值沒有型別 void 需要按照開闢的需求強制轉換成相應的型別。用free 函式來釋放mal...