C++ 建立三維陣列的幾種方法
阿新 • • 發佈:2019-01-05
(1)結構體宣告三維陣列 #include "stdafx.h" #include <iostream> #include <vector> using namespace std; int NX=2100; int NY=400; int NZ=500; int i,j,k; int _tmain(int argc, _TCHAR* argv[]) { std::vector<std::vector<std::vector<float> > > grdarray(NZ,vector<vector<float> >(NY,vector<float>(NX,0))); for(int z=0;z<NZ;z++) { for (int y=0;y<NY;y++) { for (int x=0;x<NX;x++) { grdarray[z][y][x]=0.0; cout<<grdarray[z][y][z]<<endl; } } } } (2)new動態構建三維陣列 宣告二維或者三維陣列 int i,j,k; int nWidth,nHeight,nThird; cin>>nThird>>nHeight>>nWidth; //宣告動態二維陣列 /*int **grayScale = new int * [nHeight]; for (i = 0;i < nHeight;i++) { grayScale[i] = new int[nWidth * 3]; }*/ //宣告一個三維陣列 int ***grayScale = new int ** [nThird]; for (i = 0;i < nThird;i++) { grayScale[i] = new int*[nHeight]; for (j = 0;j < nHeight;j++) { grayScale[i][j] = new int [nWidth]; } } for (k = 0;k < nThird;k++) { for (j = 0;j < nHeight;j++) { for (i = 0;i < nWidth;i++) { grayScale[k][j][i] = 1; } } } cout<<setw(5); for (k = 0;k < nThird;k++) { for (j = 0;j < nHeight;j++) { for (i = 0;i < nWidth;i++) { cout<<grayScale[k][j][i]<<setw(5); } cout<<endl; } cout<<endl; } ////釋放二維陣列 //for(i = 0;i < nHeight;i++) //{ // delete []grayScale[i]; //} //delete []grayScale; //釋放三維陣列 for (j = 0;j < nThird;j++) { for (i = 0;i < nHeight;i++) { delete []grayScale[i][j]; } } delete []grayScale; (3)malloc動態分配多維陣列 //一維陣列 #include <stdio.h> #include <malloc.h> #include <string.h> void main(void) { int i ; char (*p)[12] ; //[5][12] p = malloc(5 * sizeof(char ) * 12); //申請5行的地址空間 for(i = 0 ; i < 5 ; i++) { strcpy(*(p + i), "hello"); } for(i = 0 ; i < 5 ;i++) { printf("%s\n" , *(p + i)); } free(p); } //二維陣列 #include <stdio.h> #include <malloc.h> #include <string.h> void main(void) { int i; int j ; int num = 0 ; char **p ;//[5][12] p =(char **) malloc( 5 * sizeof(char *) ); for(i = 0 ; i < 5 ; i++) { p[i] = malloc(12 * sizeof(char)); } for(j = 0 ; j < 5 ; j++) { num = 0 ; for(i = 0 ; i < 12 ; i++) { p[j][i] = 'a' + num; num++ ; } } for(j = 0 ; j < 5 ; j++) { for(i = 0 ; i < 12 ; i++) { printf("%c" , p[j][i]); } printf("\n"); } for(i = 0 ; i < 5 ; i++) { free(p[i]); } free(p); } //三維陣列 #include <stdio.h> #include <malloc.h> #include <string.h> void main(void) { char ***pStr; int i , j , k ; // 自己分配一個三維的[3][4][5] pStr = (char ***)malloc(3 * sizeof(char **)); //第一維 //分配二維的 for(i = 0 ; i < 3 ; i++) { *(pStr + i) = malloc(4 * sizeof(char *)); } //分配三維 for(i = 0 ; i < 3 ; i++) { for(j = 0 ; j < 4 ; j++) { *(*(pStr + i) + j) = malloc(5 * sizeof(char)); } } //使用分配的記憶體 for(i = 0 ; i < 3 ; i++) { for(j = 0 ; j < 4 ; j++) { for(k = 0 ; k < 5 ; k++) { pStr[i][j][k] = 'a' ; printf("%c" , pStr[i][j][k]); } printf("\n"); } } //釋放第三維的記憶體 for(i = 0 ; i < 3 ; i++) { for(j = 0 ; j < 4 ;j++) { free((pStr[i][j])); } } //釋放第二維的記憶體 for(i = 0 ; i < 3 ; i++) { free(pStr[i]); } //釋放第一維的記憶體 free(pStr); }