アルゴリズムのそれってこーいうことか(その1)

最近少し暇になったので、仕事時間とは別に時間を作って色々勉強するようにしています。
せっかくなので、自分が勉強して詰まったところとか、他の人が詰まりそうなところとかを日記に残す事にします。
説明文を書いていく過程で自分の知識もまとまりますしね。

関数オブジェクトのCHogeHoge()って何?

さて、最近STLアルゴリズムの勉強をしています。for_each()とかtransform()とかのアレです。

今回はまず、簡単なアルゴリズムの使い方についておさらいしておきます。

intのコンテナについて、各値を1つずつ増加したい場合に、これをfor_eachを使って実装してみると次のようになります。

//! intの参照を受け取って返り値がvoid型の関数オブジェクト
struct SIncrementer1
{
	void operator()( int& rValue ) {
		++rValue;
		return;
	}
};

...

list values(3); // 0で初期化されているはず
for_each( values.begin(), values.end(), SIncremeter1() ); // ...(*A)
// ここで全ての値が1になっている
...

ちなみにSIncrementer1は清く正しくunary_functionを使って書く事ももちろん可能です。unary_functionを使うと、上のSIncrementer1は下のように書き換える事ができます。*1

struct SIncrementer1 : public unary_function< int&, void >
{
	result_type operator()( argument_type rValue ) {
		++rValue;
		return;
	}
};

ここまでがアルゴリズムの簡単な使い方のおさらいです。
さて、ここで一つ問題です。(*A)でfor_eachの第3引数に渡している SIncrementer1() ってどういう意味でしょうか?
関数オブジェクトってこういう使い方をするもんだ、となんとなく使っちゃってませんか?ていうか、恥ずかしながら自分はなんとなく使っちゃってました。
(続く)

*1:ヘッダのunary_functionの定義を見れば上と同じ事をしているのは分かるとは思います。