私は100単位ベクトルの10単位ごとに平均をとる関数を書いています。 10回の繰り返しごとに一時的な合計をクリアする必要があります。 通常、私はave=0.0
と書いていますが、ave
がダブルではなく、ある種のタイプT
であれば問題に遭遇します。たとえば、xyz座標のポイントを平均した場合、私はできません{x,y,z} = 0.0
ジェネリックC++コードで `double`をクリアする方法は?
回避するには、私はスマートポインタを作成し、それをリセットしようとしました。それは私にseg faultを与えました。 指定された型のオブジェクトを消去する最も良い方法は何ですか?私はave = 0.0
とave.reset()
を交換する場合
template <class T>
vector<T> average(const vector<T> &v, const int n) {
vector<T> ave_vec;
int iave = 0;
shared_ptr<T> ave(new T);
for (int i = 0; i < v.size(); i++) {
*ave += v[i];
iave++;
if (iave == n) {
ave_vec.push_back(*ave/n);
ave.reset(); ///> gives seg fault
iave=0;
}
}
return ave_vec;
}
、コードが動作します。
'average'関数の目的は何ですか?それは平均を計算しませんが、何か違うことをします。 –
@DavidRodríguez-dribeasそれはサイズ 'v.size()'のベクトルをとり、 'n '個の要素ごとに平均し、サイズ' v.size()/ n'のベクトルを出力します。私はgnuplotの読み込み時間を短縮するためにこれを行います。私はサイズ10_000_000のベクトルをプロットする必要があるとき、私はこの関数を実行し、1000のベクトルを取得します。1000はほぼ同じ値を持っていますが、私はsymplectic ode積分器から高精度を望んでいたのでそれらが必要です –