一維數組轉換為二維數組、三維數組以及多維數組,都不是什麼復雜的事情。只要一維數組中有一個元素,那麼它就可以轉換為二維數組;同樣的他也可以轉換為三維數組。但是這樣做,在一般情況下完全沒有實際意義。
我以a[24]的數組為例,如果你想將它轉換為b[4][6],則你需要將a[24]分為4段,每段的長度為6。所以第N段的起始位置就是0+n×6。如果這個數組轉換為三維數組(以 b[2][3][4]為例)則需要分為2段,每段再分3小段。代碼如下:
#include<iostream>
#include <cstdlib>
using namespace std;
void ot2(int *p){
for(int i=0;i<4;i++)
for(int j=0;j<6;j++)
*(p+i*6+j)=rand()%100;
for(int i=0;i<4;i++){
for(int j=0;j<6;j++){
cout<<'['<<i<<"]["<<j<<"]:"<<*(p+i*6+j)<<' ';
}
cout<<endl;
}
}
void ot3(int *p){
int a[2][3][4];
for(int i=0;i<2;i++)
for(int j=0;j<3;j++)
for(int k=0;k<4;k++)
a[i][j][k]=*(p+12*i+4*j+k);
for(int i=0;i<2;i++)
for(int j=0;j<3;j++){
for(int k=0;k<4;k++)
cout<<"a["<<i<<"]["<<j<<"]["<<k<<']'<<a[i][j][k]<<' ';
cout<<endl;
}
}
int main(){
int *p=new int[24];
cout<<"將一維數組轉換為二維數組結果如下:"<<endl;
ot2(p);
cout<<"將一維數組轉換為三維數組結果如下:"<<endl;
ot3(p);
cout<<"原始的一維數據如下:"<<endl;
for(int i=0;i<24;i++)
cout<<*(p+i)<<' ';
return 0;
}
結果如下:
將一維數組轉換為二維數組結果如下:
[0][0]:83 [0][1]:86 [0][2]:77 [0][3]:15 [0][4]:93 [0][5]:35
[1][0]:86 [1][1]:92 [1][2]:49 [1][3]:21 [1][4]:62 [1][5]:27
[2][0]:90 [2][1]:59 [2][2]:63 [2][3]:26 [2][4]:40 [2][5]:26
[3][0]:72 [3][1]:36 [3][2]:11 [3][3]:68 [3][4]:67 [3][5]:29
將一維數組轉換為三維數組結果如下:
a[0][0][0]83 a[0][0][1]86 a[0][0][2]77 a[0][0][3]15
a[0][1][0]93 a[0][1][1]35 a[0][1][2]86 a[0][1][3]92
a[0][2][0]49 a[0][2][1]21 a[0][2][2]62 a[0][2][3]27
a[1][0][0]90 a[1][0][1]59 a[1][0][2]63 a[1][0][3]26
a[1][1][0]40 a[1][1][1]26 a[1][1][2]72 a[1][1][3]36
a[1][2][0]11 a[1][2][1]68 a[1][2][2]67 a[1][2][3]29
原始的一維數據如下:
83 86 77 15 93 35 86 92 49 21 62 27 90 59 63 26 40 26 72 36 11 68 67 29