当定义数组时,若数组的长度为变量时,我们通常需要采用动态数组的方法去new一下
对于一维数组:
int*p=new int[n];
//在堆区创建一个长度为n的一维数组,并用指针p来接收它
就大功告成了。二维数组在底层上可以看作为多个一维数组封装在一起。
二维数组,我们不能按照一维数组那样直接在堆区开辟。比如
int*p=new int[m][n];//这是❌的
而以下就是我搜索到的两种方法:
1.在堆区开辟二维数组
int**p=new int[m] ;//创建一个指针数组
for(int i=0;i<m;i++)
{p[i]=new int[n]} ;//其中每一个p[i]都是一个在堆区开辟的数组
这样便实现了在堆区创建一个二维数组matrix[m][n]
使用这个方法最应该注意的就是对于二维数组中的每个一维数组应该单独释放;
for(int i=0;i<m;i++)//先释放指针数组中每个指针指向的数组
{ delete []p[n] ;p[i]= NULL }
delete []p; p=NULL;//再释放指针数组本身
2.使用vector容器开辟二维数组
vectorrongqi可以看作是一个数组,那么二维数组就可以使用vector容器嵌套vector容器来实现
对于一个vector容器,可以这样初始化:
vector<int>m(n,elem)//创建一个vector容器且将n个elem拷贝给自身
而我们可以借此创建vector容器嵌套:
vector<vector<int>>matrix(m,vector<int>(n,0))://创建一个vector容器,其内包含m个具有n个元素的vector容器,并将所有元素初始化为0;或者可以说创建一个m行n列的二维数组,数组中所有元素被初始化为
二维数组其实就可以看作为多个一维数组相加,使用嵌套vector容器实现多个vector相加;
因此便实现了同样的作用
即创建了二维数组:matrix[m][n]
刚学习不久C++;可能有写的不是很好的地方,烦请各位大佬们指正,谢谢!!