for_each()で統計をとる方法

dataに適用して統計をとる関数オブジェクトcounterを作成して以下のように呼び出してもrateに結果が反映されない。

counter rate ;
for_each( data.begin() , data.end() , rate ) ;
cout << rate.get() << endl ;

原因はfor_each()の第3パラメタが値渡しのため、呼び出し元のrateに結果が反映されないから。じゃぁ出来ないかと言うとそんなことはなくて、for_each()の戻り値はコピー後の関数オブジェクトなので以下でOK。

counter rate = for_each( data.begin() , data.end() , counter() ) ;
cout << rate.get() << endl ;