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