目錄
為了使類屬演算法具有靈活性,stl常使用函式的過載機制為演算法提供兩種形式。演算法的第一種形式使用的是常規的操作來實現。第二種形式中,演算法可以根據使用者指定的準測對元素經行處理。
函式物件包含了乙個可以通過函式呼叫運算子()使用的函式。實際上,函式物件是過載了函式呼叫運算子operator()的類模板。
使用者可以建立自己的函式物件。stl提供了算術函式物件,關係函式物件,邏輯函式物件。
算術函式物件:
plus加
minus減
multiplies乘
divides除
modulus模
negate取反
示例**:
#include #include #include #include #include #include #include using namespace std;
int functadd(plus,int,int);
int main() ;
vectorintslist(list,list+8);
ostream_iteratorscreenout(cout, " ");
cout << "intlist:";
copy(intslist.begin(),intslist.end(),screenout);
cout << endl;
//累計
int suma = accumulate(intslist.begin(),intslist.end(),0);
cout << "accumulate:" << suma << endl;
int product = accumulate(intslist.begin(),intslist.end(),1,multiplies());
cout << "product:" << product << endl;
return 0;
}int functadd(plussum,int x,int y)
執行結果:
intqueue.front:26
intqueue.back:33
intqueue.front:18
intqueue :
18 50 33
關係函式物件:
equal_to等於
not_equal_to不等於
greater大於
greater_equal大於等於
less小於
less_equal小於等於
示例**:
#include #include #include #include #include #include #include using namespace std;
int main() else
int temp[8] = ;
vectorveclist(temp,temp+8);
vector::iterator intitr1,intitr2;
ostream_iteratorscreen(cout, " ");
cout << "veclist:" <());
intitr2 = intitr1 + 1;
cout << "intitr1:" << *intitr1 <<",intitr2:" << *intitr2 << endl;
cout << "psition:" << veclist.end() - intitr2 << endl;
cout << "psition:" << intitr2 - veclist.begin() << endl;
return 0;
}
執行結果:
isequal=1
there is greater than hello
veclist:
2 3 4 5 1 7 8 9
intitr1:5,intitr2:1
psition:4
psition:4
邏輯運算物件:
logical_not
logical_and
logical_or
STL之函式物件
過載函式呼叫操作符的類,其物件常稱為函式物件 function object 即它們是行為類似函式的物件,也叫仿函式 functor 其實就是過載 操作符,使得類物件可以像函式那樣呼叫。假定某個類有乙個過載的operator 而且過載的operator 要求獲取乙個引數,我們就將這個類稱為 一元仿函...
STL之函式物件事例
for each transform bind1st 函式的使用。知識點 如果stl函式需要乙個一元函式,而現有乙個能完成相應工作的自適應二元函式,則 可以使用bind1st 或bind2nd使該二元函式適用於一元介面。程式輸出 gr8 36 39 42 45 48 m8 25 27 29 31 3...
STL函式物件之自定義函式物件
如何定義自己的函式物件,它使用於任何的繫結器 要定義自己的繫結器要滿足一定的條件 必須提供引數和返回值的型別。stl為我們提供了兩個結構體 template struct unary function template struct binary function 乙個例子 template str...