C++中二维数组的动态分配

作者:   来源:csdn博客   公布者:admin

时间:2009-04-23 13:55:03   点击:115

C++中一维数组的动态分配十分经常使用,但C++刚開始学习的人可能非常少想过要使用动态分配的二维数组,或者自觉得二维数组就是这样分配的(至少我自己開始的时候就这样觉得):int
m=2, n=3; int** array2D=new int[m][n];。这全然是我们写多了像int n=4; int* array=new
int[n];这种语句留下的后遗症,纯粹是由于惯性太大刹都刹不住,就像某同学学完“一二三”要写“万”一样。

事实往往不是这么简单,看以下的正确方法就知道了:
#include <iostream>
using
std::cout;
using std::endl;
int main() {
 int i, j;
 int
m=2, n=3;

//分配行指针数组
 int** array2D=new int*[m];

//为每一行分配空间
 for(i=0; i<m; ++i)
{
  array2D[i]=new int[n];
 }

//能够略微測试一下
 for(i=0; i<m; ++i) {
  for(j=0;
j<n; ++j)
{
   array2D[i][j]=i+j;
  }
 }
 for(i=0;
i<m; ++i) {
  for(j=0; j<n; ++j)
{
   cout<<array2D[i][j]<<"/t";
  }
  cout<<endl;
 }

//删除每一行分配的空间
 for(i=0; i<m; ++i) {
  delete[]
array2D[i];
 }

//删除行指针数组
 delete[] array2D;
 
 return
EXIT_SUCCESS;
}

利用C++二维数组动态分配的特点,我们还能够分配出用静态数组无法实现的不等长二维数组,想要多少就分配多少。看以下的样例:
#include
<iostream>
using std::cin;
using std::cout;
using
std::endl;
int main() {
 int i, j;
 int m=3;
 int
n[3]={1, 2, 3};

//行指针数组
 int** array2D=new
int*[m];
 
 //每行分配不一样多的空间
 for(i=0; i<m; ++i)
{
  array2D[i]=new int[n[i]];
 }

//測试一下
 for(i=0; i<m; ++i) {
  for(j=0;
j<n[i]; ++j)
{
   array2D[i][j]=j+1;
  }
 }
 for(i=0;
i<m; ++i) {
  for(j=0; j<n[i]; ++j)
{
   cout<<array2D[i][j]<<"/t";
  }
  cout<<endl;
 }
 
 //删除分配的空间
 for(i=0;
i<m; ++i) {
  delete[] array2D[i];
 }
 delete[]
array2D;
 
 return EXIT_SUCCESS;
}

当然,假设你想一劳永逸,不想这么麻烦的分配来分配去,那么去写个类模板吧,在类模板中重载数组下标运算符,你就能够像使用静态数组一样使用你的类了。

C++中二维数组的动态分配,布布扣,bubuko.com

时间: 2024-08-04 22:15:18

C++中二维数组的动态分配的相关文章

C语言中二维数组如何申请动态分配内存

C语言中二维数组如何申请动态分配内存: 使用malloc函数,先分配第一维的大小,然后再循环分配每一维的大小 #include <stdio.h> #include <malloc.h> int main() { int **a; int i, j; a = (int**)malloc(sizeof(int*)*3);//为二维数组分配3行 for (i = 0; i < 3; ++i){//为每列分配4个大小空间 a[i] = (int*)malloc(sizeof(int

C++ 二维数组/多维数组的动态分配(new)和释放(delete)

1. 一维数组 对于简单的一维数组动态内存分配和释放,如下: int *array1D;//假定数组长度为m //动态分配空间 array1D = new int [m]; //释放 delete [] array1D; 2. 二维数组 二维数组的动态分配和释放 //假定数组第一维长度为m, 第二维长度为n //动态分配空间 <pre name="code" class="cpp">int **array2D<span style="fo

二维数组的动态分配(new)、初始化(memset)和撤销(delete)

来自http://blog.csdn.net/maverick1990/article/details/22829135 一维数组 动态分配,int *array = new int[10] 初始化,memset(array,0,sizeof(array)); 撤销,delete[] array 二维数组m行n列 int **d; d = new int *[10]; for(int i =0;i<10;i++){ d[i] = new int[5] } 先分配一个10单元的数组指针的指针的首地

php中二维数组排序问题方法详解

合肥开源IT教育分享一篇<php中二维数组排序问题方法详解>的文章希望能够帮助在学习php的新手们,如果还有什么不懂的问题 可以关注我们的官方网站:www.kyitjy.com  豪华的名师团队,多位技术专家授课,多位核心研发工程师研发授课. PHP中二维数组排序,可以使用PHP内置函数uasort() 示例一: 使用用户自定义的比较函数对数组中的值进行排序并保持索引关联 回调函数如下:注意回调函数的返回值是负数或者是false的时候,表示回调函数的第一个参数在前,第二个参数在后排列 $per

js中二维数组篇

QQ:1187362408 欢迎技术交流和学习 js中二维数组篇(二维数组篇): TODO: 1,一位数组声明并初始化如下: <span style="color:#000000;">var chkProQuery = new Array("ddlPro", "ddlCity", "ddlCoun", "ddlTown", "ddlVill", "ddlGird&q

关于C语言中二维数组传参————————【Badboy】

直接上代码: #include void Fun(int *a[],int m,int n)// { printf("%d\t",*a);//[0][0] /* int e[2][2][2]={8,7,6,5,4,3,2,1}; int *f,***g; g=e; f=e;//有警告,但不会报错 printf("%d\n",*f); */ } /*解释: Fun()中的int *a[2]表示定义指针数组a[2],a[0],a[1]存储的都是指针, a表示的是数组的首

C++中二维数组传参的方法详解

C++中二维数组传参的方法详解 首先需要明确,C++中其实没有多维数组,所谓的多维数组,其实就是数组的数组: 另外,数组中元素的个数也是数组类型的一部分. 当一个数组的元素仍然是数组时,通常使用2个维度来定义它,一个数组表示数组本身的大小,另一个维度表示其元素大小(它的元素也是数组): int ia[3][4]; //大小为3的数组,每个元素是含有4个整数的数组 int (*p)[4] = ia;//p指向含有4个整数的数组(指向第一个内层数组) 1 将给定第二维长度的二维数组作为形参传递 #i

php中二维数组如何使用

最近需要使用PHP中的二维数组,就用一个简单的例子来说明PHP中二数组是如何使用 <?php $a=array('a','b','c'); $c=array('a1','b1','c1'); $b=array('id'=>18,'count'=>27,$a,$c); echo $b['id'];   // 18 echo $b['count'];  //27 echo $b[0][0];  //a echo $b[0][1];  //b echo $b[0][2];  //c echo

【转载】二维数组的动态分配和参数传递

本篇随笔为转载,原贴地址:http://www.cnblogs.com/bigshow/archive/2009/01/03/1367661.html. 1. C语言动态分配二维数组 (1)已知第二维 Code-1 char (*a)[N];//指向数组的指针 a = (char (*)[N])malloc(sizeof(char *) * m); printf("%d\n", sizeof(a));//4,指针 printf("%d\n", sizeof(a[0]