我正在编写一个函数,该函数对 100 个单位向量的每 10 个单位进行平均。我必须在每 10 次迭代后清除一个临时总和。通常,我会写ave=0.0
,但如果ave
不是 double 而是 some type 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
,则代码有效。