C++ 创建三维数组的几种方法
(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 " , *(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(" "); } 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(" "); } } //释放第三维的内存 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); }
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。