std::accumulateとtemplate

一度どハマりしたことがあるのでメモ。
std::accumulateは、vectorなどコンテナの要素を加算してくれる便利な関数だが、第三引数にちょっと罠がある。
まず特に問題ないサンプル。

出力結果 : sum : 6

ところが以下の例だと値が丸められてしまう。

出力結果 : sum : 6

この場合は、第三引数がdoubleでなくてはならない。

出力結果 : sum : 6.6

テンプレートクラス内などで使う場合はstatic_castを使う。
例えばメンバをvectorで保持するクラスに合計値を出す関数を実装する例。

出力してみる。

出力結果:
sum : 6
sum : 6.6

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です