gpt4 book ai didi

具有 max_element 和迭代器的 c++ 函数 = 慢 3 倍

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:14:39 25 4
gpt4 key购买 nike

当我调用以下函数时,我正在开发的程序速度变慢了三倍。如果它不被调用几百万次也不错。

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。有没有其他方法可以显着加快此功能?

最佳答案

max_elementmin_element 都在范围内迭代,而整个步骤可以在一个函数中完成。

我相信一些编译器在他们的 STL 中有一个 minmax_element 函数,但我不认为它在标准中。你可以自己写。我最初将其编写为非模板版本,但如果您有一个好的编译器,它应该没有什么区别。

尝试这样的事情(未经测试)

template <typename Iter, typename Pred>
void minmax_element(Iter begin, Iter end, Iter& min, Iter& max, const Pred& comp)
{
min = begin;
max = begin;

typedef std::iterator_traits<Iter>::value_type T;
for (++begin; begin != end; ++begin)
{
if (comp(*max, *begin))
max = begin;
else if (comp(*begin, *min))
min = begin;
}
}

template <typename Iter>
void minmax_element(Iter begin, Iter end, Iter& min, Iter& max)
{
minmax_element(begin, end, min, max, std::less<std::iterator_traits<Iter>::value_type>());
}

关于具有 max_element 和迭代器的 c++ 函数 = 慢 3 倍,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5106410/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com