37項 範囲に関する要約情報を取得するには、accumulateまたはfor_eachを使おう
範囲に関する要約情報を取得するには、accumulateまたはfor_eachを使おう
numericには、accumulateがあります。accumulateは、指定した範囲から値を求めるために使えます。
accumulateに関数を指定せずに呼び出すと、範囲の和を返します。
list<double> l; ... double sum = accumulate(l.begin(), l.end(), 0.0); // 0.0であることに注意
accumulateに0ではなく0.0を指定しているのは、和がint型に変換されるのを防ぐためです。
関数を指定することで、accumulateの求める値を変えることができます。
例えば、文字列の長さの和を求めるには、下のように書きます。
string::size_type stringLengthSum(string::size_type sumSoFar, // sumSoFarはそれまでの文字数の合計 const string &s) { return sumSoFar + s.size(); } ... list<string> l; ... string::size_type sum = accumulate(l.begin(), l.end(), 0, stringLengthSum);
範囲の平均値などもaccumulateで求められます。
for_eachは範囲のすべての要素に処理を行うアルゴリズムですが、指定した範囲から値を求めるためにも使えます。