2

我正在编写一个函数,该函数对 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,则代码有效。

4

2 回答 2

5

初始化它:

T ave = T();

并重置它:

ave = T();
于 2012-05-13T20:14:49.027 回答
2

如果ave是 a shared_ptr<T>,请尝试将其重置ave为默认初始化T

*ave = T();
于 2012-05-13T20:13:48.920 回答