背景知识:

对二维数组的理解方式至关重要:把二维数组看成是一种特殊的一维数组,它的元素又是一个一维数组。

例如:int a[3][4], 可以理解为定义了3个一维数组,即相当于  a[0], a[1], a[2], 而它们的每个元素又是一个包含4个元素的一维数组,即:

a[0]: a[0][0], a[0][1], a[0][2], a[0][3]

a[1]: a[1][0], a[1][1], a[1][2], a[1][3]

a[2]: a[2][0], a[2][1], a[2][2], a[2][3]

但我们为您习惯上把二维数组看成矩阵,所以二维数组也称为矩阵。


方法一:

因为二维数组也可以看成矩阵,所以整体思路是先给二维数组的每一行开辟一块空间,用来指向每一行(即存放每一行的地址);然后分别为每一行再开辟内存空间,用来管理列。

int main()
{int rows = 3; //行数int cols = 4; //列数//开辟一块内存空间来指向每一行(注意:每一行都是一维数组)。int** arr = new int* [rows];for (int i = 0; i < rows; i++) {//为每一行再开辟内存,管理列arr[i] = new int[cols]; //为二维数组赋初值}return 0;}

以上动态创建二维数组的方法属于C语言,只是C++也兼容这种方法。


拓展:动态创建二维数组

//自定义比较函数
bool cmp(int a[], int b[])
{if (a[0] != b[0]) return a[0] > b[0];if (a[1] != b[1]) return a[1] > b[1];if (a[2] != b[2]) return a[2] > b[2];
}int main()
{//创建一维数组并初始化int a[6] = { 1, 1, 1, 2, 2, 3 };      int b[6] = { 4, 4, 3, 9, 5, 9 };       int c[6] = { 3, 7, 5, 4, 8, 6 };   //动态创建二维数组int rows = 4;int cols = 3;int** re = new int* [rows];      for (int i = 0; i < rows; ++i){re[i] = new int[cols];  //赋值re[i][0] = a[i];re[i][1] = b[i];re[i][2] = c[i];}//sort()函数排序后输出sort(re, re + rows, cmp); for (int i = 0; i < rows; ++i)cout << re[i][0] << ' ' << re[i][1] << ' ' << re[i][2] << endl;return 0;
}

方法二:因为二维数据也可以看成特殊的一维数组,它的每个元素都是一个一维数组。整体思路:在C++种vector的底层就是一维数组(不定长),如果我们再给vector指定一个vector类型,就构成一个二维数组了。因此C++中还可以用vector来创建二维数组。

int main()
{int rows = 3; //行数int cols = 4; //列数//创建一个有rows行的二维数组arrayvector<vector<int>> array(rows);//设置每一行的元素个数for (int i = 0; i < rows; i++) {array[i].resize(cols);}//赋值array = { {1,4,3,5}, {1,4,7,8} , {1,3,5,6} };//输出for(auto p : array)cout<<p[0]<<' '<<p[1]<<' '<<p[2]<<' '<<p[3]<<endl;return 0;
}

C++ 动态创建二维数组相关推荐

  1. C语言-动态创建二维数组

    文章目录 1 前言 2 动态创建的实现方法 2.1 方法1(适用于二级指针传递) 2.2 方法2(模拟C语言数组的储存方式) 1 前言 参照我之前的一篇文章 二维数组做函数的参数 文章中提到,当我们想 ...

  2. C++ 动态创建二维数组int** B = new int* [n];

    #include <iostream> using namespace std;int main() {//动态创建一维数组int* A = new int[10]; //int A[10 ...

  3. c语言动态生成二维数组,C语言 动态创建二维数组

    /*C语言 如何动态创建二维数组 转化为一维数组申请数组,创建和释放都比较简单 */ #include #include #include #define RANK 10 #define COLUMN ...

  4. C语言动态创建二维数组

    在编程中有时需要使用二维数组作为buffer,下面是我写的一个二维数组的demo. 这里面涉及到几个内存操作的知识点,一个一个的来讲. 1. 创建两个1维数组,用于给二维数组填充值的时候使用. /*2 ...

  5. malloc动态创建二维数组(C语言)

    c语言用malloc动态创建二维数组 #include <stdio.h> #include <stdlib.h> void fun(int m,int n){//行数,列数 ...

  6. 动态创建 二维数组和三维数组,最后将数据转为OPENCV图片显示

    二维 //int **dpPT1 = new int*[Index_Qty];//动态申请二维数组//int **dpPT2 = new int*[Index_Qty];//int **dpPP = ...

  7. C++动态创建多维数组

    众所周知,在c++里动态创建一个一维数组可以直接: int* arr = new int[length]; 但是,如果到了二维,这样是行不通的: int** arr = new int[length] ...

  8. python创建一个n*m的二维数组_Python中创建二维数组

    Python中创建二维数组 二维数组 二维数组本质上是以数组作为数组元素的数组,即"数组的数组",类型说明符 数组名[常量表达式][常量表达式].二维数组又称为矩阵,行列数相等的矩 ...

  9. jupyter notebook多维数组运算_Python创建二维数组的正确姿势

    List (列表)是 Python 中最基本的数据结构.在用法上,它有点类似数组,因为每个列表都有一个下标,下标从 0 开始.因此,我们可以使用 list[1] 来获取下标对应的值.如果我们深入下列表 ...

最新文章

  1. 拼音怎么写_老师:不会写的字用圈代替,看到孩子试卷,网友:人才
  2. 支付宝支付 第三集:搭建项目及测试(含代码)
  3. [攻防世界 pwn]——when_did_you_born
  4. 历时7周,当然了真正的安装时间没这么多,终于把集群安装好了
  5. 从源码的角度说说Activity的setContentView的原理(二)
  6. react如何获取表单数据
  7. Qt笔记-解决Q3DScatter加载QCustom3DItem时Cannot open the file问题
  8. 一些特殊的电脑快捷键
  9. [翻译] 物理引擎javascript实现
  10. 20200610每日一句
  11. 计算虚继承中对象占用的空间
  12. 零基础程序员如何自学编程?用这6种方法就够了!
  13. 如何免费下载优质的PPT模板?
  14. JLink的JTag和SWD引脚定义及接线说明
  15. c语言字符串把小写转换大写字母,c语言将字符串中的小写字母转换成大写字母...
  16. 毕业设计开题分析:MIPS指令集硬件化设计与实现
  17. conda deactivate python3_无法访问conda环境中的activate、deactivate或conda
  18. javaspringboot面试,挑战华为社招
  19. python爬虫进阶-每日一学(图片反爬-雪碧图)
  20. untiy游戏接入之uc_sdk(九游)

热门文章

  1. 【webrtc】nack
  2. 二阶常系数微分方程的通解
  3. Oracle RAC集群三种心跳机制
  4. CMOS工艺,Al/Si接触中的尖楔现象
  5. 这两天比较火的量子科技是什么?
  6. python制作简单动画_把数据摇起来!用Python制作动画可视化效果!
  7. oracle备份数据库的格式,ORACLE 数据库备份文件的后缀是()。
  8. [Unity] 制作游戏 小球爱碰撞
  9. java模拟手机浏览web_在PC上测试移动端网站和模拟手机浏览器的5大方法
  10. iOS adhoc 版本App 如何制作安装