當我調用下面的函數時,我正在開發的程序慢三倍。 這不會是壞的,如果它不被稱爲幾百萬次。C++函數max_element&iterator = 3x較慢
double obterNormLarguraBanda(const std::vector<double>& v, int periodos)
{
int aa;
double maximo, minimo, valor;
std::vector<double>::const_iterator inicio;
if (v.size() < periodos)
{
inicio = v.begin();
}
else
{
inicio = v.end() - periodos;
}
maximo = *max_element(inicio, v.end(), excludeWrong);
minimo = *min_element(inicio, v.end(), excludeWrong);
return (v.back()-minimo)/(maximo - minimo);
}
bool excludeWrong(double i, double j)
{
if (i==-1 || j==-1) return false;
return i<j;
}
periodos
取值500 有另一種方式來加快顯著這個功能呢?
路易斯
你在調試模式下編譯?也許它使用安全的stl樣式實現,並且每次調用都受到檢查。嘗試開啓優化。 – 2011-02-24 15:05:46
如果沒有'min_element'和'max_element',你可能會變得更好,並且執行一次迭代來找到兩者。 – 2011-02-24 15:10:20
順便說一句''double''''''嚴格平等並不是一個好主意。 – sharptooth 2011-02-24 15:18:23