STL---関数オブジェクト(擬似関数)の概要
1410 ワード
STLで提供される様々なアルゴリズムでは2つのバージョンが提供されることが多いが、2番目のバージョンでは3番目のパラメータが関数オブジェクトであり、1番目のバージョンではoperator<がデフォルトでソートされる.
関数オブジェクトは、ソート時に隣接する2つの要素が真の操作を満たす「操作」と見なすことができます.もちろん、関数を設計して関数ポインタを渡すことができますが、抽象的なインタフェースが必要です.関数ポインタはアダプタと組み合わせて使用できません.この場合、関数のような動作をするオブジェクトが必要です.
STLで作成された関数オブジェクトをいくつか見てみましょう.
演算クラス:
加算:plus;減算:minus;乗算multiplies;除算:divide;タッチ:modulus;否定:negate;
テストの例を次に示します.
リレーショナル演算クラスの関数オブジェクト:
等しい:equal_to; 等しくない:not_equal_to; 大きい:greater小さい:less
以上:greater_equal以下:less_equal
上記と同様に、作成オブジェクトを表示して呼び出すこともできますし、一時オブジェクトを生成して呼び出すこともできます.第2の方法は一般的です.
関数オブジェクトは、ソート時に隣接する2つの要素が真の操作を満たす「操作」と見なすことができます.もちろん、関数を設計して関数ポインタを渡すことができますが、抽象的なインタフェースが必要です.関数ポインタはアダプタと組み合わせて使用できません.この場合、関数のような動作をするオブジェクトが必要です.
STLで作成された関数オブジェクトをいくつか見てみましょう.
演算クラス:
加算:plus
テストの例を次に示します.
#include <iostream>
#include <functional>
using namespace std;
int main()
{
//
plus<int> pobj;
minus<int> mobj;
multiplies<int> muobj;
divides<int> dobj;
modulus<int> modobj;
negate<int> nobj;
//
cout<<pobj(3,5)<<endl;
cout<<mobj(3,5)<<endl;
cout<<muobj(3,5)<<endl;
cout<<dobj(3,5)<<endl;
cout<<modobj(3,5)<<endl;
cout<<nobj(3)<<endl;
//
cout<<plus<int>()(3,5)<<endl;
cout<<minus<int>()(3,5)<<endl;
cout<<multiplies<int>()(3,5)<<endl;
cout<<divides<int>()(3,5)<<endl;
return 0;
}
リレーショナル演算クラスの関数オブジェクト:
等しい:equal_to
以上:greater_equal
上記と同様に、作成オブジェクトを表示して呼び出すこともできますし、一時オブジェクトを生成して呼び出すこともできます.第2の方法は一般的です.