我正在寫一個平均每100個單位矢量的10個單位的函數。每10次迭代後我必須清除一個臨時總和。 通常情況下,我會寫ave=0.0
,但如果ave
不是雙倍但是某種類型T
,我遇到了問題。例如,如果我平均與xyz座標點,s我不能做{x,y,z} = 0.0
如何清除泛型C++代碼中的`double`?
要解決,我試圖創建一個智能指針,然後重置它。那給了我seg故障。 清除沒有指定類型的對象的最佳方法是什麼?
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
,代碼工作。
「平均」函數的意圖是什麼?它沒有計算出平均值,但做了一些不同的事情。 –
@DavidRodríguez-dribeas它需要一個大小爲'v.size()'的向量,平均每個'n'個元素,並輸出一個大小爲'v.size()/ n'的向量。我這樣做是爲了減少gnuplot的加載時間。當我不得不繪製尺寸爲10_000_000的矢量時,我運行此函數並獲得尺寸爲1000的矢量。1000具有幾乎相同的值,但是我需要它們,因爲我想從我的辛集成器中獲得高精度 –