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 ;