• 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


  • 相关阅读:
    在SharePoint中实现Workflow(2):创建一个Workflow
    pku1384PiggyBank(动态规划)
    pku1088滑雪(记忆性搜索)
    hdu1251统计难题(初次接触字典树)
    详细解说 STL 排序(Sort)
    pku1631Bridging signals(动态规划题+二分搜索)
    pku1157LITTLE SHOP OF FLOWERS(简单动态规划题:摆放鲜花使审美价值达到最高)
    pku1067取石子游戏(博弈)
    pku2524Ubiquitous Religions(初次接触并查集)
    pku1050To the Max(求矩阵的最大子段和)
  • 原文地址:https://www.cnblogs.com/fuhaots2009/p/3429346.html
Copyright © 2020-2023  润新知