STL學習筆記 六 函式物件

2022-07-08 18:36:15 字數 1250 閱讀 9056

條款38:遵循按值傳遞的原則來設計仿函式

仿函式都是 pass-by-value

function for_each(inputiterator first, inputiterator last, function f); //

f按值傳遞, 結果按值返回

函式物件按值傳遞和按值返回,所以函式物件要盡可能小(物件拷貝開銷大)

條款39:確保判別式是"

純函式"

條款40:若乙個類是仿函式,則應使它可配接

條款41:理解ptr_fun、mem_fun、mem_fun_ref

templatefunction for_each(inputiterator first, inputiterator last, function f)

乙個函式f和乙個物件x,如果在x物件呼叫f,則:

f(x); //f是乙個非成員函式

x.f(); //f是成員函式,且x是乙個物件或物件引用

x->f(); //f是成員函式,且x是指向物件x的指標

現在有乙個用於測試widget物件的非成員函式:

bool test(widget& widget);

和乙個存放widget物件的容器: std::vectorvec;

我們可以使用: for_each(vec.begin(), vec.end(), test);

現在假設test函式是widget的成員函式,即widget支援自測:

class

widget ;

如果我們如下呼叫:

for_each(vec.begin, vec.end(), &widget::test);    //

編譯錯誤!!!

mem_fun:如果乙個存放widget*的指標容器,需要呼叫自己定義的成員函式時:

for_each(vecptr.begin(), vecptr.end(), mem_fun(&widget::test));

mem_fun_ref:如果乙個存放widget的容器,需要呼叫自己定義的成員函式時:

for_each(vec.begin(), vec.end(), mem_fun_ref(&widget::test));

條款42:確保less與 operator

< 具有相同語義

STL 學習筆記 之 函式物件

c stl,三大核心元件 containers,iterators以及algorithms,即容器,迭代器和演算法。另外還一種重要元件,即函式物件 functionobject r 函式物件又稱為仿函式 functor 函式物件其實就是乙個行為類似函式的 東西 它可以沒有引數,也可以帶有若干引數,其...

STL 函式物件學習

函式物件 乙個過載了運算子 的個物件,可以像乙個函式一樣使用。普通的函式 bool comp int val 函式物件,宣告為模板類,並可以接受引數,具有更大擴充套件性 templateclass comp bool operator t val private t m val 呼叫上面兩種情況,實...

STL 函式物件

一 函式物件 functor stl中提供了一元和二元函式的兩種functor,通過unary function和binary function提供了這兩種不同引數數量的functor的基本結構,在這兩個型別中,分別內嵌定義一元和二元函式操作在模版推演的時候需要用到的typedef.一元函式的定義為...