我想寫一個通用的平均算法。也就是說,對於任何具有運算符+(T)和運算符/(浮點數)的類型T,我想找到容器中T的平均值:平均小型
類似這樣的工作對浮點類型工作正常:
template<typename T>
typename T::value_type RunningAverage(const T& v)
{
typename T::value_type vectorRunningAverage = 0;
for(unsigned int i = 0; i < v.size(); ++i)
{
vectorRunningAverage = (v[i] + i*vectorRunningAverage)/(i+1);
}
return vectorRunningAverage;
}
我可以改變
typename T::value_type vectorRunningAverage = 0;
到
float vectorRunningAverage = 0;
,然後它會用工作鍵入像無符號字符(不能添加多個無符號字符並將結果存儲在無符號字符中而不溢出),因爲它可以隱式轉換爲浮點型。然而,如果我有一些更復雜的類型(比如我想平均一個std::vector<std::vector<unsigned char> >
中的組件,這是行不通的。有沒有我丟失的東西?或者這樣做沒有意義嗎?
提供返回類型作爲模板參數的好主意。通過這種方式,我可以對不可變的類型(即來自庫或STL容器樣式類型的類型)做類似的事情。 另外,好吧,我會讓它採用迭代器。 – 2012-02-21 02:31:07