入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

C++ 创建三维数组的几种方法

创建时间:2016-08-24 投稿人: 浏览次数:8005
(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。