如何动态创建数组

转载 2015年07月08日 15:41:58

    

                                 

分类: pure c++ 2410人阅读 评论(1) 收藏 举报

我们知道在C或C++里,有时候我们要定义的数组的长度是不定的,所以要动态地创建数组,也就是在运行的时候动态分配内存。
我们常用的是对一维或二维数组动态的创建,但毕竟有时候我们要对更多维的数组进行动态地创建的(尽管少用)。
对于一维数组p[n]的动态创建:
    char *p=new char[n];
对于二维数组p[n][m]的动态创建:
    char **p=new char*[n];
    for(int i=0;i<n;i++)
        p[i]=new char[m];
其实一维二维的创建都比较简单,但如果是4维或5维呢?这往往使初学者不知所云。其实只要我们从中找出规律后,就一通百通了。
往往,我们对同一件事物,以不同的看法看它,就有不同的收获或不同的见解。而对于抽象的事物,我们要建立自己的模型,模型建立得好坏,对问题是否能够得到解决有很大的影响。
结构体我们都懂,其实我们也可以把数组“看成"是结构体,比如数组a[8],可以看成是一个有八个相同类型成员的结构体;如数组a[n][m]可以看成是一个有n个类型为一维数组的成员的结构体,而每个成员可以看成是

一个有m个相同类型成员的结构体,…………。这样,对于一个N维的数组,可以把它看成一个有N层的树,我们实际的数据存在树的叶结点里,而树的每一层是我们动态创建的,比如数组a[i1][i2][i3]……[N-2][N-1][N],第

一层个数为i1,第二层个数为i1*i2,第N层个数为i1*i2*……*N。所以,维数越多,时间和空间上都增长得非常快,而且我们一般也很少用到多维的动态数组,但是,尽管这样,这种模型是有利于我们对多维数组以及它的动态创建的理解的,。下面就说说如何以这样的模型或思维方式动态创建四维的数组p[n][m][p][t]:

     char****p=new char***[n];//首先创建一个根结点,类型为char****,它指向一个有n个元素且类型为char***的数组(或每个成员都为char***类型的结构体)
     for(int i=0;i<n;i++)//创建第二层树结点,每个结点的类型为char***,它指向一个有m个元素且类型为char**的数组(或每个成员都为char**类型的结构体)
    {
          p[i]=new char**[m];
         for(int j=0;j<m;j++)//创建第三层树结点,每个结点的类型为char**,它指向一个有q个元素且类型为char*的数组(或每个成员都为char*类型的结构体)
         {
        p[i][j]=new char*[q];
for(int k=0;k<q;k++)//创建第四层树结点,每个结点的类型为char*,它指向一个有t个元素且类型为char的数组(或每个成员都为char类型的结构体)
{
       p[i][j][k]=new char[t];
                }
         }
    }
到此,这个四维的数组就创建完成了,我们可以给n,m,p,t赋一定的值,就创建一个大小为n*m*p*t的数组了,然后我们就可以如这样:*p[i][j][k]=value;存入我们的值了

回收内存时也简单,和分配的时候刚好相反,如下:

int t1=n,t2=m,t3=q;
for(i=0;i<n&&t1;i++)
{
   for(int j=0;j<m&&t2;j++)
   {
    for(int k=0;k<q&&t3;k++)
     delete p[i][j][k],t2--;
    delete p[i][j],t3--;
   }
   delete p[i],t1--;
}
delete [] p;

}

相关文章推荐

c语言中动态创建二维数组

  • 2010年12月14日 11:40
  • 350B
  • 下载

c++动态创建二维数组

  • 2015年03月13日 22:20
  • 14KB
  • 下载

动态创建二维数组

动态创建二维数组------使用vector不定长数组 二维vector vector > veclnt(m , vector(n)); //m*n的二维vector 动态创建m...

js中动态创建关联数组的问题

  • 2011年10月24日 15:48
  • 12KB
  • 下载

学习小结(动态创建数组,find_first_of())

动态创建一维数组,动态创建二维数组,find_first_of(),find_first_not_of(),str.find_last_of(),str.find_last_not_of()...

C语言实现动态创建二位数组

在C语言中动态的一位数组使用malloc动态分配空间来实现的。实际上,C语言中没有二维数组或者说至少对二维数组没有直接的支持。而是将二维数组转换为一位数组的数组。如:编译器会将a[1][3]解释为 *...

vector动态创建数组

相应的头文件: #include vector定义向量对象:vector ivec; //定义向量对象 ivec vector ivec1(ivec); // 定义...
  • will130
  • will130
  • 2015年05月12日 10:42
  • 1405

[ExtJS5学习笔记]第二十节 Extjs5配合数组的push方法,动态创建并加载组件

items其实就是一个数组,可以看成是json格式样式的一个数组。既然这样,那么当我们定义好了这样的字符串样式之后,可以使用数组的push方法,将这些项,一个一个的加载进去,就可以动态的进行组件创建了...

动态创建表格,更新、提交、循环获取表格中各种元素的数据 并转换为JSON,数组的数据格式。

动态创建表格,更新、提交、循环获取表格中各种元素的数据 并转换为JSON,数组的数据格式。...

动态创建多维数组

数组的动态内存分配 假设我们要为一个字符数组(一个有 20 个字符的字符串)分配内存,我们可以使用上面实例中的语法来为数组动态地分配内存,如下所示: char* pvalue  = NULL;  ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何动态创建数组
举报原因:
原因补充:

(最多只允许输入30个字)