我正在编写一个函数,该函数平均每 10 个单位向量中的每 10 个单位。我必须在每 10 次迭代后清除一个临时总和。通常,我会写ave=0.0
但是如果ave
不是双精度而是某种类型的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 = 0.0
替换ave.reset()
,代码有效。
要初始化它:
T ave = T();
并重置它:
ave = T();
如果ave
是shared_ptr<T>
,请尝试将ave
重置为默认初始化的T
:
*ave = T();