程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了动态数组的实现大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决动态数组的实现?

开发过程中遇到动态数组的实现的问题如何解决?下面主要结合日常开发的经验,给出你关于动态数组的实现的解决方法建议,希望对你解决动态数组的实现有所启发或帮助;

在我的作业中,我将使用动态数组找到一个总和网格。这是我没有使用动态数组的代码(我使用了二维数组)。我使大小取决于用户输入。有人可以帮助我理解并在这段代码中实现动态数组吗?如果您需要,我可以发布我的所有代码,以帮助您了解我正在尝试做什么。

voID sumGrID(int arraY[],int& SizE)
{
    cout << "Sum GrID" << endl;
    int a2d[Size][Size];
    for (int i = 0; i < Size; i++)
    {
        for (int j = 0; j < Size; j++) 
        {
            a2d[i][j] = arraY[i] + arraY[j];
        }
    }
    cout << "  " << setw(7);
    for (int j = 0; j < Size; j++)
    {
        cout << setw(7) << arraY[j] << ' ';
    }
    cout << endl;
    for ( int k = 0; k < Size; k++)
    {
        cout << arraY[k] << ' ';
        for (int l = 0; l < Size; L++) 
        {
            cout << setw(7) << a2d[k][l] << ' ';
        }
        cout << endl;
    }
    cout << endl;
}

我的代码输出如下:

Sum GrID
        1       2       3 
1       2       3       4 
2       3       4       5 
3       4       5       6 

解决方法

语句 int a2d[Size][Size]; 定义了一个可变长度数组,因为 Size 不是一个编译时常量。 VLA 是 not part of standard C++,因此应避免使用它们。分配动态数组的正确且标准的方法是使用 new[] 运算符(请参阅 1、2),例如:

void sumGrid(int arraY[],int& SizE)
{
    cout << "Sum Grid" << endl;

    int **a2d = new int*[Size];

    for (int i = 0; i < Size; i++)
    {
        a2d[i] = new int[Size];

        for (int j = 0; j < Size; j++) 
        {
            a2d[i][j] = arraY[i] + arraY[j];
        }
    }
    cout << "  " << setw(7);
    for (int j = 0; j < Size; j++)
    {
        cout << setw(7) << arraY[j] << ' ';
    }
    cout << endl;
    for ( int k = 0; k < Size; k++)
    {
        cout << arraY[k] << ' ';
        for (int l = 0; l < Size; l++) 
        {
            cout << setw(7) << a2d[k][l] << ' ';
        }
        cout << endl;
    }
    cout << endl;

    for (int i = 0; i < Size; i++)
    {
        delete[] a2d[i];
    }
    delete[] a2d;
}

或者,使用模拟二维数组的一维数组,以便整个数组顺序分配在内存中,而不是分散在内存中:

void sumGrid(int arraY[],int& SizE)
{
    cout << "Sum Grid" << endl;

    int *a2d = new int[Size*Size];

    for (int i = 0; i < Size; i++)
    {
        for (int j = 0; j < Size; j++) 
        {
            a2d[(i*SizE)+j] = arraY[i] + arraY[j];
        }
    }
    cout << "  " << setw(7);
    for (int j = 0; j < Size; j++)
    {
        cout << setw(7) << arraY[j] << ' ';
    }
    cout << endl;
    for ( int k = 0; k < Size; k++)
    {
        cout << arraY[k] << ' ';
        for (int l = 0; l < Size; l++) 
        {
            cout << setw(7) << a2d[(k*SizE)+l] << ' ';
        }
        cout << endl;
    }
    cout << endl;

    delete[] a2d;
}

如此,您应该避免直接使用 new[]/delete[] ,因为它@R_749_10197@,而且在发生错误时尤其有可能导致内存泄漏。改用标准的 std::vector 容器,让它为您处理内存管理,例如:

使用二维稀疏数组:

#include <vector>

void sumGrid(int arraY[],int& SizE)
{
    cout << "Sum Grid" << endl;

    std::vector<std::vector<int>> a2d(SizE);

    for (int i = 0; i < Size; i++)
    {
        a2d[i].resize(SizE);

        for (int j = 0; j < Size; j++) 
        {
            a2d[i][j] = arraY[i] + arraY[j];
        }
    }
    cout << "  " << setw(7);
    for (int j = 0; j < Size; j++)
    {
        cout << setw(7) << arraY[j] << ' ';
    }
    cout << endl;
    for ( int k = 0; k < Size; k++)
    {
        cout << arraY[k] << ' ';
        for (int l = 0; l < Size; l++) 
        {
            cout << setw(7) << a2d[k][l] << ' ';
        }
        cout << endl;
    }
    cout << endl;
}

使用一维顺序数组:

#include <vector>

void sumGrid(int arraY[],int& SizE)
{
    cout << "Sum Grid" << endl;

    std::vector<int> a2d(Size * SizE);

    for (int i = 0; i < Size; i++)
    {
        for (int j = 0; j < Size; j++) 
        {
            a2d[(i*SizE)+j] = arraY[i] + arraY[j];
        }
    }
    cout << "  " << setw(7);
    for (int j = 0; j < Size; j++)
    {
        cout << setw(7) << arraY[j] << ' ';
    }
    cout << endl;
    for ( int k = 0; k < Size; k++)
    {
        cout << arraY[k] << ' ';
        for (int l = 0; l < Size; l++) 
        {
            cout << setw(7) << a2d[(k*SizE)+l] << ' ';
        }
        cout << endl;
    }
    cout << endl;
}

大佬总结

以上是大佬教程为你收集整理的动态数组的实现全部内容,希望文章能够帮你解决动态数组的实现所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: