1.定義
標準ライブラリによって定義されたライブラリ定義関数オブジェクト:標準ライブラリは、ヘッダーファイル関数内の算術演算子、関係演算子、および論理演算子を表すクラスのセットを定義します。各クラスは、名前付き操作の呼び出し演算子を定義します。
これらのクラスはテンプレートの形式で定義され、特定のアプリケーションタイプ(つまり、呼び出し演算子のパラメータータイプ)を指定できます。
例えば。
vector<string> svec = {
"a31", "b1" };
sort(svec.begin(), svec.end(), greater<string>());
for_each(svec.begin(), svec.end(), [](const string& s)
{
std::cout << s << endl; });
plus<int> intAdd; //可执行int加法的函数对
negate<int> intNegate; //可对int值取反的函数对象
int sum = intAdd(10, 20); //sum=30
std::cout << sum << endl;
sum = intAdd(10, intNegate(10)); //sum=0
std::cout << sum << endl;
出力結果は次のとおりです。
b1
a31
30
0
2.標準ライブラリ関数オブジェクトのリスト:
算術 | 関係 | 論理 |
---|---|---|
プラス | に等しい | 論理積 |
マイナス | not_equal_to | logical_or |
乗算します | 大きい | logical_not |
分水界 | great_equal | |
係数 | もっと少なく | |
否定する | less_equal |
3.ポインタを比較できます
例えば。
//lambda表达式是比较两个字符串大小
string a1 = "b1";
string b1 = "a1";
vector<string*> nameTable = {
&a1 , &b1}; // vector of pointers
sort(nameTable.begin(), nameTable.end(),
[](string* a, string* b) {
return *a < *b; });
for_each(nameTable.begin(), nameTable.end(), [](string* s)
{
std::cout << *s << endl; });
//标准库比较两个指针的内存地址,
vector<string*> nameTable2 = {
&a1 , &b1 }; // vector of pointers
sort(nameTable2.begin(), nameTable2.end(), less<string*>());
for_each(nameTable2.begin(), nameTable2.end(), [](string* s)
{
std::cout << *s << endl; });
出力:
a1
b1
b1
a1
[見積もり]