簡單明瞭,這個是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;1my_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從上面的定義可以看出,map的value_type是std::pair型別,它的first值就是關鍵字,second值儲存map的值域。class map
;
3 -- find_if在std::vector的應用
vector的find_if用法與map的很相似,區別僅僅是二者的value_type不一樣而已。我們看下vecotr對value_type的定義。
template可以看出vector的value_type就是容器的值型別,了解了這點,我們做個vector的find_if示範。class vector
;
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...