100単位ベクトルの10単位ごとに平均化する関数を書いています。10回の反復ごとに一時的な合計をクリアする必要があります。通常は書きますave=0.0
が、ave
がdoubleではなく、あるタイプの場合T
、問題が発生します。たとえば、xyz座標を使用してポイントを平均すると、実行できません。{x,y,z} = 0.0
回避するために、スマートポインターを作成してからリセットしようとしました。それは私にセグメンテーション違反を与えました。指定されたタイプを持たないオブジェクトをクリアするための最良の方法は何ですか?
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;
}
に置き換えるave.reset()
とave = 0.0
、コードは機能します。