0

doubleやfloatなどの標準コンテナがあった場合、以下のラムダ関数の「int」をテンプレート化する必要はありますか? 私はこれについて助けを求めて世界中を探しました。私は教授の助けを求めさえしました. 彼はそれが可能であると言っていますが、答えについては不可解です.

template <typename T>
   float mean(T &container)
   {
     auto sum = std::accumulate(container.begin(), container.end(), 0/*initial value*/,
     [](int total, int cur)
     {
          return total+cur;
     }//end of lambda
   );//end of accumulate
   return static_cast<float>(sum) / container.size(); //to find the mean
}//end of mean

前もって感謝します。

4

2 に答える 2

1

通常、コンテナーから含まれているデータの型を取得する方法があります。

たとえばint、その関数の s を、そのT::value_typeような typedef を公開するすべてのコンテナーをサポートする必要があるものに置き換えることができます。

これは のようなタイプでは機能しmapませんが、それらをサポートしたい場合は特化することができます。

于 2013-01-12T03:23:45.920 に答える
-1

しかし、そのような関数をそのように書くと、データの損失を引き起こす可能性があるように思えます。たとえば

std::vector<float> vf;
vf.push_back(1.3);
vf.push_back(1.5);
vf.push_back(1.3);
vf.push_back(1.123);
vf.push_back(1.526);
float m=mean(vf);

常に 1 を返します

ここでの答え >>>編集部分でstd::accumulate を使用した計算平均が失敗vf.push_back(1.3);するというのは、実際には正しくありませんvf.push_back(3.3);

于 2013-01-12T03:41:26.627 に答える