C++中动态申请二维数组并释放方法

 C/C++中动态开辟一维、二维数组是非常常用的,以前没记住,做题时怎么也想不起来,现在好好整理一下。

 C++中有三种方法来动态申请多维数组

  (1)C中的malloc/free

  (2)C++中的new/delete 

  (3)STL容器中的vector

 下面逐一介绍:

第一种:malloc/free

1.动态开辟一维数组

//动态开辟一维数组
void dynamicCreate1Array()
{
	int m;
	int i;
	int *p;
    
	printf("请输入开辟的数组长度:");
	scanf("%d",&m);
	p = (int*)malloc(sizeof(int)*m);//动态开辟

	printf("请输入数据:");
	for(i = 0; i < m ; i++)
		scanf("%d",&p[i]);

    printf("输出数据:
");
	for(i = 0; i < m; i++)
		printf("%d ",p[i]);
	free(p);
}


运行结果:


2.动态开辟二维数组

//动态开辟二维数组
void dynamicCreate2Array()
{
	int m,n;
	int i,j;
	int **p;

    printf("请输入数组行和列:");
	scanf("%d%d",&m,&n);

	p = (int**)malloc(sizeof(int*)*m); //开辟行

	for(i = 0; i < m; i++)
	{
		*(p+i) = (int*)malloc(sizeof(int)*n);//开辟列
	}
	//输入数据
	printf("请输入数:");
    for(i = 0 ; i < m;i++)
		for(j = 0; j < n;j++)
			scanf("%d",&p[i][j]);
    
	//输出数据
	for(i = 0 ; i < m;i++)
	{
		for(j = 0; j < n;j++)
		{
		   printf("%3d ",p[i][j]);
		}
		printf("
");
	}
	//释放开辟的二维空间
	for(i = 0; i < m;i++)
		free(*(p+i));
}


运行结果:


第二种:new/delete

1.动态开辟一维数组

void DynamicCreate1Array()
{
	int len;
	
	cout<<"请输入长度:";
	cin>>len;
	
	int *p = new int[len];
	
	cout<<"请输入数据:";
    for(int i = 0; i < len; i++)
		cin>>p[i];
	
	cout<<"输出数据:"<<endl;
	for(i = 0; i < len; i++)
		cout<<setw(4)<<p[i];
	
	delete[] p;
}


2.动态开辟二维数组

void DynamicCreate2Array()
{
	int m,n;
	cout<<"请输入行和列:";
	cin>>m>>n;

	//动态开辟空间
    int **p = new int*[m]; //开辟行
	for(int i = 0; i < m; i++)
		p[i] = new int[n]; //开辟列

	cout<<"请输入数据:";
	for(i = 0 ; i < m ; i++)
		for(int j = 0; j < n; j++)
			cin>>p[i][j];
 
	cout<<"输出数据:"<<endl;
	for(i = 0; i < m; i++)
	{
		for(int j = 0; j < n; j++)
			cout<<setw(3)<<p[i][j];
		cout<<endl;
	}

	//释放开辟的资源
    for(i = 0; i < m; i++)
		delete[] p[i];
	delete[] p;

}

第三种:STL中的vector

动态开辟二维数组

void VectorCreate()
{
	int m,n;
	cout<<"请输入行和列:";
	cin>>m>>n;
	
	//注意下面这一行:vector <int后两个 "> "之间要有空格!否则会被认为是重载 "> > "。 
    vector<vector<int> > p(m,vector<int>(n));
	
	cout<<"请输入数据:";
	for(int i = 0 ; i < m ; i++)
		for(int j = 0; j < n; j++)
			cin>>p[i][j];
		
	cout<<"输出数据:"<<endl;
	for(i = 0; i < m; i++)
	{
    	for(int j = 0; j < n; j++)
			cout<<setw(3)<<p[i][j];
		cout<<endl;
	}
			
}


转载请标明出处: http://blog.csdn.net/u012027907


原文地址:https://www.cnblogs.com/fuhaots2009/p/3429346.html