储与对原创的尊重,本文参考链接如下
C++ 用变量定义数组
//int a[n+1]; //这一种只有在一些写的编译器如dev c++才会支持
//int a[45]; 没有下面的指针快
int* a = new int[n+1];
cin>>n;
int* a=new int[n];
if ((a) == NULL)
{
//动态分配失败
}
//设有m行n列
cin>>m>>n;
int **a = new int* [m];
for(int i = 0; i < m; i++)
{
a[i] = new int [n];
}
/*
而这样动态声明的数组随意的a[k]都是一个int*类型,即一个地址了,所以仅仅能a[i][j]或者*(*(a+i)+j)来訪问数组的元素,而不能a[i*n+j]这样转换着用。
*/
delete []a; // 正确的使用方法
delete a; // 错误的使用方法
//new出来的一定不要忘了delete掉
//后者相当于delete a[0],漏掉了另外n-1个对象。
//对于第二个的二维数组
//释放内存:
for(int i = 0; i < m; ++i)
{
delete []a[i];
}
delete []a;
第一种方法
#include
#include
#include
#include
using namespace std;
int main()
{
int N=5, M=6;
vector<vector<int> > obj(N); //定义二维动态数组大小5行
for(int i =0; i< obj.size(); i++)//动态二维数组为5行6列,值全为0
{
obj[i].resize(M);
}
for(int i=0; i< obj.size(); i++)//输出二维动态数组
{
for(int j=0;j<obj[i].size();j++)
{
cout<<obj[i][j]<<" ";
}
cout<<"\n";
}
return 0;
}
第二种方法
#include
#include
#include
#include
using namespace std;
int main()
{
int N=5, M=6;
vector<vector<int> > obj(N, vector<int>(M)); //定义二维动态数组5行6列
for(int i=0; i< obj.size(); i++)//输出二维动态数组
{
for(int j=0;j<obj[i].size();j++)
{
cout<<obj[i][j]<<" ";
}
cout<<"\n";
}
return 0;
}