二维数组动态分配&螺旋矩阵

最近遇到了一个螺旋矩阵的问题,需要用到二维数组,由此研究下二维数组的动态分配。在这之前首先要了解二维指针。原文参见二维数组指针

引用块内容
三种二维指针的表示方法
(1)、int **Ptr;
(2)、int *Ptr[ 5 ];
(3)、int ( *Ptr )[ 5 ];
以上三例都是整数的二维数组,都可以用形如 Ptr[ 1 ][ 1 ] 的
方式访问其内容;但它们的差别却是很大的。
具体的差别见原文。

然后就研究动态分配了!以下关于动态分配的代码引用自C++中二维数组的动态分配
二维数组的定义可以如下:

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

    //在这里编写需要的操作

    //使用完后别忘了释放空间避免内存泄漏
    for (int i = 0; i < m; i++)
     delete[]array2D[i];
    delete array2D;
    return 0;
}

此外,还可以分配静态数组不能实现的不等长二维数组(即每行分配空间时用数组代替常数)
例:

int array2D()
{
    int i, j;
    int m=3;
    int n[3]={1, 2, 3};
    //行指针数组
    int** array2D=new int*[m];

    //每行分配不一样多的空间
    for(i=0; i
     array2D[i]=new int[n[i]];
    }
    //再此执行操作

    //删除分配的空间
    for(i=0; i
     delete[] array2D[i];
    }
    delete[] array2D;
    return 0;
}

最后附上螺旋矩阵的实现。详情见二维数组动态分配and螺旋矩阵

int matrix()
{
 int i, j;
 int n;
 cout << "请输入矩阵大小:" << endl;
 cin >> n;
 //动态分配二维数组
 int** matrix = new int*[n];
 for (i = 0; i < n; i++)
 {
  matrix[i] = new int[n];
 }
 int m, k;
 j = 0;
 m = n;
 int count = 1;
 for (k = 0; k < (n + 1) / 2; k++)
 {
  for (i = k; i < m; i++)
  {
   matrix[j][i] = count;
   count++;
  }
  i--;
  j++;
  for (; j < m; j++)
  {
   matrix[j][i] = count;
   count++;
  }
  j--;
  i--;
  for (; i >= k; i--)
  {
   matrix[j][i] = count;
   count++;
  }
  i++;
  j--;
  for (; j > k; j--)
  {
   matrix[j][i] = count;
   count++;
  }
  j++;
  m--;
 }
 for (i = 0; i < n; i++)
 {
  for (j = 0; j < n; j++)
  {
   cout << matrix[i][j] << "\t";
  }
  cout << endl;
 }
 //释放内存
 for (i = 0; i < n; i++)
 {
  delete[] matrix[i];
 }
 delete[] matrix;

 return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值