STL---関数オブジェクト(擬似関数)の概要


STLで提供される様々なアルゴリズムでは2つのバージョンが提供されることが多いが、2番目のバージョンでは3番目のパラメータが関数オブジェクトであり、1番目のバージョンではoperator<がデフォルトでソートされる.
関数オブジェクトは、ソート時に隣接する2つの要素が真の操作を満たす「操作」と見なすことができます.もちろん、関数を設計して関数ポインタを渡すことができますが、抽象的なインタフェースが必要です.関数ポインタはアダプタと組み合わせて使用できません.この場合、関数のような動作をするオブジェクトが必要です.
STLで作成された関数オブジェクトをいくつか見てみましょう.
演算クラス:
加算:plus;減算:minus;乗算multiplies;除算:divide;タッチ:modulus;否定:negate;
テストの例を次に示します.
#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; 等しくない:not_equal_to; 大きい:greater小さい:less
以上:greater_equal以下:less_equal
上記と同様に、作成オブジェクトを表示して呼び出すこともできますし、一時オブジェクトを生成して呼び出すこともできます.第2の方法は一般的です.