前言:这里针对一维动态数组和二维动态数组分别在C和C++中如何申请,一直觉得malloc()和new()不好用,用管了vector来实现维度不确定的一维和二维数组,结果今天懵逼了,遇到必须传入int **arr问题,突然之间忘记不能用vector arr,然后就悲剧了,唉!给自己一个教训,复习一下动态数组的申请。
以int型为主:m:行,n:列
(一)
(1)C实现一维动态数组
int *arr = (int *)malloc(sizeof(int) *n); //申请一个大小为n的以为数组
注意:不能写成 int arr[] = (int *)malloc(sizeof(int)*n); //VC报错:error C2440: 'initializing' : cannot convert from 'int *' to 'int []'
也不能写成 int arr[n]; // 报错n大小不能确定
(2)C实现二维动态数组申请
int m,n; //申请一个m行n列的二维动态数组
scanf("%d,%d",&m,&n);
int **arr = (int **)malloc(m * sizeof(int *)); //m行 ,m个一维指针
for (int i=0; i
arr[i] = (int *)malloc(sizeof(int)* n); //n列,每个指针指向一个n个元素的一维数组
}
(二)C++中实现动态数组申请:new /delete, STL中的vector
(1)一维数组申请
int *arr = new int[n]; //申请一个大小为n的int 型数组
delete [] arr; //释放申请的空间
注意:同样不能写成 int arr[] =new int[n];
也不能写成 int arr[n]; // 报错n大小不能确定
或者使用: vector
vector arr(n) ; //申请一个大小为n的int 型数组
(2)二维数组申请
int **arr = new int *[m] ; //申请有m个指针的数组
for(int i=0;i
{
}
//释放申请的内存
for(int i = 0;i
{
delete [] arr[i];
}
delete [] arr;
或者使用vector> arr(m,vector>(n) ) ; //申请m行n列的二维数组
总结:对于二维数组的动态申请,无论是C中malloc,还是C++中的new都可以实现,但是相对于STL中简单粗暴的vector来说,他哥两似乎有点不如vector好用,然而,还是得好好记住,比如本女子许久不用,只是觉得vector好用,然后就哪哪都是用vector,然后比如人家直接要求的必须用二级指针的题目,也许就是瞬间失忆了一样,记不起来,先写到这,算是教训,也是总结。
阅读(1996) | 评论(0) | 转发(0) |