C++按升序对指针数组进行排序

标签 c++ arrays pointers for-loop bubble-sort

我有这个函数,其中 2 个 vector 相互比较,程序找到 vector 的平方差之和。

    double Search::NNS(vector<vector<double>> bb, vector<vector<double>> aa)
    {
        int M = 768; int N = 1024;
        int R = 49; int C = 36;
        //double SSD[] = MainVectorBlock[] - WallyVector[];
        //double SSD[] = SSD[] * SSD[];
        //sum = sum + SSD[];

    vector<vector<double>> &MainIMG = bb;
    vector<vector<double>> &WallyIMG = aa;
    double *SSD = new double[R*C];
    double sum = 0;


    for (int bx = 0; bx < M; bx += R)
        for (int by = 0; by < N; by += C)
        {
            Compare = new double*[R];
            for (int x = 0; ((x < R) && ((bx + x) < M)); ++x)
            {
                Compare[x] = new double[R];
                for (int y = 0; ((y < C) && ((by + y) < N)); ++y)
                {
                    if ((bx + x) >= M)
                    {
                        cout << Compare[bx + x] << Compare[by + y] << " ";

                    }

                    //cout << MainIMG[bx + x][by + y] << " ";
                    Compare[x][y] = MainIMG[bx + x][by + y] - WallyIMG[x][y];
                    Compare[x][y] = Compare[x][y] * Compare[x][y];
                    //sum += Compare[x][y];
                    SSD[R*C] += Compare[x][y];
                    //SSD[R*C] = sum;
                    //cout << Compare[x][y] << " ";
                }

            }
            //cout << "\n\n\n" << endl;
            //cout << sum << endl;
            //cout << SSD[R*C] << "\t" << sum << endl;

            for (int i = 0; i < R*C; i++)
            {
                for (int j = 0; j < R*C; j++)
                {
                    if (SSD[i] > SSD[j])
                    {
                        int temp = SSD[i];
                        SSD[i] = SSD[j];
                        SSD[j] = temp;
                    }
                }
            }

        }
    for (int a = 0; a < R*C; a++)
    {
        cout << SSD[a] << endl;
    }

    return 0;
}

我可以显示所有差值平方和,但是当我尝试按升序对这些值进行排序时,我一直得到这个值 -6.27744e+66。 我尝试更改循环并将其放置在整个主 for 循环中,但我仍然继续获取该值。

最佳答案

double *SSD = new double[R*C];

您已经分配了内存但从未将其初始化为某个值。那么你已经直接使用了:

SSD[R*C] += Compare[x][y];

在开始向其添加值之前,将 SSD 的所有项目初始化为 0

关于C++按升序对指针数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41280606/

相关文章:

javascript - array.splice 与将值设置为 null

c - 将 "array of pointers"传递给函数

c++ - 堆指针分配之间的差异

c++ - 无法以十六进制显示

c++将矩阵转换为行指针 vector

c++ - CRT 调试堆在包含 exception_ptr.hpp 时报告泄漏

c++ - 我如何在桌面应用程序中使用 youtube chromeless 播放器?

javascript - Node.js 中稀疏数组的内存消耗

java - 使用gson将json数组转换为android中的json对象?

无法在新数组中指向或存储数组元素