c++ - 优化包含 for 和 if 的 C++ 代码块

标签 c++ function loops optimization

我正在解决一个问题,这里有一段代码比理论预期的效果要差得多:

inline bool check(const int index, const float* f) const{
    for(int j=0; j<d; j++)
        if(points[index][j] != f[j])
            return false;
    return true;        
}

bool func(int p_cap, const float* f) const{
    int i = (p_cap - error > 0? p_cap - error: 0);
    int l = (p_cap + error + 1 < keyCount? p_cap + error + 1: keyCount);
    for(; i<l; i++)
        if(check(i, f))
            return true;
    return false;
}

这些函数在一个类中,pointskeyCount成为类(class)的成员。 pointskeyCount*d二维数组。 d是一个全局变量。关于如何优化此代码块的任何帮助?谢谢...

编辑:

我正在使用插值在数组中进行搜索,并且我的数据是可能的。期望使用这种技术搜索任何点都会比线性搜索更快。我有这个期望的原因是因为error = 1 .这意味着,对于任何一点,我都在查看最大值 3 points 中的不同点大批。我有一百万个这样的数组。每个存储正好 10 个点。线性搜索的期望值为 N/2 ,这意味着我需要查看 5在我到达查询点之前(再次,预期/平均值)。因此,这个“插值代码”应该比线性搜索运行得更快,但这并没有发生。

使用的编译命令:
g++ -O3 -march=native -DNDEBUG test.cpp -o test

最佳答案

我不确定编译器是否已经这样做了,但你可以做两件事:

  • 使用 1 个 for 循环遍历数组(因为 C++ 将它们按顺序存储在内存中),这消除了多次索引和指针计算的需要,但前提是您要遍历所有条目并且所有条目都是可检查的。
  • 将其转换为单个 if 检查,在您的示例中,您在 check() 函数中使用 1 ,并且在 func() 函数中再次检查返回的值。

  • 您需要检查编译后的代码,看看它是否已经应用了这些优化。

    关于c++ - 优化包含 for 和 if 的 C++ 代码块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61189791/

    相关文章:

    c++ - 如何解析质数的倍数 C++?

    php - MySQL用另一个表替换列中的逗号分隔值找到旧值替换为新值

    需要 JavaScript 循环来显示隐藏列表 onclick 一次一个

    c - 函数指针和调用约定

    c++ - 在 Str 中转换为 Lower 和 Hold - C++

    javascript - 尝试使用循环向 Javascript 对象添加多个属性

    c++ - 如何在 C++ 中消除可变参数函数与另一个函数的歧义

    c++ - 在另一个应用程序窗口顶部绘制边框

    c++ - 用不同的值初始化 vector

    c - 如何在c中正确分配和打印结构指针?