我正在写一个平均100个单位 vector 中每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
,则该代码有效。 最佳答案
要初始化它:
T ave = T();
并重置它:
ave = T();
关于c++ - 如何清除通用C++代码中的 `double`?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10574815/