我正在写一个平均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/

10-13 07:58