C++ 代码优化:提升循环效率和可读性

以下代码片段展示了如何通过使用新的数组来优化循环效率和可读性,具体来说是针对以下代码段:

for (int i = 0; i < iterations; i++) {
    for (int j = 0; j < N; j++) {
        int r = std::round(y[j]);
        int c = std::round(x[j]);
        fmax(x[j], y[j], rows, cols);
        double fex = Ix.at<double>(r, c);
        double fey = Iy.at<double>(r, c);
        cv::Mat tempX = p * (x + gamma * fex);
        cv::Mat tempY = p * (y + gamma * fey);
        x = tempX;
        y = tempY;
    }
}

优化方法

原代码中,每次迭代都直接更新 xy 数组,这可能会导致效率低下,尤其是当 N 很大时。为了提升效率,我们可以使用两个新的数组 new_xnew_y 来保存迭代过程中的更新结果,避免直接修改原数组,最后再将新的坐标赋值给原始的 xy 数组。

改进后的代码

for (int i = 0; i < iterations; i++) {
    std::vector<double> new_x(N);
    std::vector<double> new_y(N);

    for (int j = 0; j < N; j++) {
        int r = std::round(y[j]);
        int c = std::round(x[j]);
        fmax(x[j], y[j], rows, cols);
        double fex = Ix.at<double>(r, c);
        double fey = Iy.at<double>(r, c);
        double sum_x = 0.0;
        double sum_y = 0.0;

        for (int k = 0; k < N; k++) {
            sum_x += p.at<double>(j, k) * (x[k] + gamma * fex);
            sum_y += p.at<double>(j, k) * (y[k] + gamma * fey);
        }

        new_x[j] = sum_x;
        new_y[j] = sum_y;
    }

    x = new_x;
    y = new_y;
}

优化效果

通过使用新的数组,我们避免了直接修改原数组,从而提升了代码效率,同时代码也更加易于理解和维护。

C++ 代码优化:提升循环效率和可读性

原文地址: https://www.cveoy.top/t/topic/ERq 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录