c++创建二维数组

本文介绍了在C++中创建二维动态数组的三种方法:使用常量声明、使用指针间接引用以及使用Vector。每种方法都有其特点,如常量声明需要预先确定大小,而Vector则利用STL简化了创建过程。
部署运行你感兴趣的模型镜像

c++里不在‘二维数组’这种类型,二维数组会被解释为这个一维数组的元素是类型是另一种一维数组。

方法一:使用常量

如果将b声明为一个常量,如new int[a][5],它的实质和一维动态数组没有太大区别只是数组元素被声明为了int[5]。

    void TestFunc_(unsigned int n)  
    {  
        unsigned int i, j;  
      
        // 元素类型为‘int[5]’的数组,可赋值给‘int[5]’类型的指针.  
        int (* array2D)[5] = new int[n][5];  
        for(i=0; i<n; ++i)  
        {  
            for(j=0; j<5; ++j)  
            {  
                array2D[i][j] = i * 5 + j;  
            }  
        }  
      
        // 回收方法和普通动态数组相同,使用'delete[]'即可  
        delete[] array2D;  
    }  

这个方法需要确定b的大小。

方法二:使用指针间接引用

声明多个一维数组,然后将这些数组的首地址按顺序储存到一个动态数组中。

    void TestFunc_pointer(unsigned int height, unsigned int width)  
    {  
        unsigned int i, j;  
      
        //  数组的元素类型为‘int *’,可赋值给指向‘int *’的指针.  
        int **array2D = new int *[height];  
        for(i=0; i<height; ++i)  
        {  
            array2D[i] = new int[width];  
        }  
      
        // 访问.  
        for(i=0; i<height; ++i)  
        {  
            for(j=0; j<width; ++j)  
            {  
                // 内存非连续,注意防止越界.  
                array2D[i][j] = i * width + j;  
            }  
        }  
      
        // 首先回收低一级的动态数组.  
        for(i=0; i<height; ++i)  
        {  
            delete[] array2D[i];  
        }  
        // 然后回收高一级的动态数组.  
        delete[] array2D;  
    }  

这个方法实现了两个维度的动态创建,访问也比较方便。但是有一个缺点:由于低一级的数组是分开创建的,所以整个二维数组的内存不连续——类似‘array2D[i * width + j]’这样的访问就不要使用了,容易造成访问越界。

方法三:使用Vector

    void TestFunc_vector(unsigned int height, unsigned int width)  
    {  
        typedef std::vector<int>  IntVector;  
        typedef std::vector<IntVector>    IntVector2D;  
        unsigned int i, j;  
      
        IntVector2D *pArray2D = new IntVector2D;  
      
        // 动态设置大小.  
        pArray2D->resize(height);  
        for(i=0; i<height; ++i)  
        {  
            (*pArray2D)[i].resize(width);  
        }  
      
        for(i=0; i<height; ++i)  
        {  
            for(j=0; j<width; ++j)  
            {  
                (*pArray2D)[i][j] = i * width + j;  
            }  
        }  
      
        delete pArray2D;  
    }  

可以看到,在vector这个‘更高级’的数组帮助下,我们能够很轻易的创建二维数组。稍微美中不足的是由于引入了STL,程序会变得更大一些——但基本不影响运行速度。

参考资料:https://blog.csdn.net/yuqinjh/article/details/79095787

您可能感兴趣的与本文相关的镜像

ComfyUI

ComfyUI

AI应用
ComfyUI

ComfyUI是一款易于上手的工作流设计工具,具有以下特点:基于工作流节点设计,可视化工作流搭建,快速切换工作流,对显存占用小,速度快,支持多种插件,如ADetailer、Controlnet和AnimateDIFF等

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值