如何清除通用 C++ 代码中的“double”

how to clear `double` in generic c++ code?

本文关键字:代码 double C++ 何清除 清除      更新时间:2023-10-16

我正在编写一个函数,该函数平均每 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();

如果aveshared_ptr<T>,请尝试将ave重置为默认初始化的T

*ave = T();