動態建立多維陣列 才不簡單

2021-06-19 05:52:53 字數 1017 閱讀 3534

我們知道在c或c++裡,有時候我們要定義的陣列的長度是不定的,所以要動態地建立陣列,也就是在執行的時候動態分配記憶體。

我們常用的是對一維或二維陣列動態的建立,但畢竟有時候我們要對更多維的陣列進行動態地建立的(儘管少用)。

對於一維陣列p[n]的動態建立:

char *p=new char[n];

對於二維陣列p[n][m]的動態建立:

char **p=new char*[n];

for(int i=0;i

乙個有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;ip[i][j]=new char*[q];

for(int k=0;k}}

到此,這個四維的陣列就建立完成了,我們可以給n,m,p,t賦一定的值,就建立乙個大小為n*m*p*t的陣列了,然後我們就可以如這樣:*p[i][j][k]=value;存入我們的值了

**記憶體時也簡單,和分配的時候剛好相反,如下:

int t1=n,t2=m,t3=q;

for(i=0;ifor(int k=0;kdelete p[i][j][k],t2--;

delete p[i][j],t3--;

}delete p[i],t1--;

}delete p;

}

new動態建立陣列?(new建立多維陣列)

在使用陣列時我們難免會感覺陣列的靈活性太低,所以new成了我們使用頻率很高的乙個操作符。int p 2 int p2 2 2 int p3 2 2 2 這是最常規的操作。接下來上new的用法 new的第一種用法 int p newint 5 int p2 4 newint 5 4 int p3 4 ...

動態多維陣列

寫 的時候會碰到多維陣列的記憶體分配和釋放問題,在分配和釋放過程中很容易出現錯誤。下面貼上一些示例 以供參考。如果要給二維陣列 m n 分配空間,可以寫成下面 char a,i 先分配m個指標單元,注意是指標單元 所以每個單元的大小是sizeof char a char malloc m sizeo...

建立多維陣列

3種方法 1 利用索引生成陣列 2 利用函式 randn ones和zeros 生成陣列 3 利用cat函式生成多維陣列 1 索引法 a rand 3 建立3階隨機數組 a 0.9649 0.9572 0.1419 0.1576 0.4854 0.4218 0.9706 0.8003 0.9157 ...