动态数组是指在编译时不能确定数组长度,程序在运行时需要动态分配内存空间的数组。
1.变长一维数组
实现变长数组最简单的是变长一维数组,你可以这样做:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
//文件名:array01.cpp
#include<iostream>
using namespace std;
int
main(){
int
len;
cin>>len;
//用指针p指向new动态分配的长度为len*sizeof(int)的内存空间
int
*p=
new
int
[len]
;...........delete[]p;
return0;
}
|
注意int*p=newint[len];这一句,你不能这样做:int p[len];C++编译器会报错说len的大小不能确定,因为用这种形式声明数组,数组的大小需要在编译时确定。
而且这样也不行:
int p[]=new int[len];
编译器会说不能把int*型转化为int[]型,因为用new开辟了一段内存空间后会返回这段内存的首地址,所以要把这个地址赋给一个指针,所以要用int*p=new int[len];
array01.cpp实现了一个变长的一维数组,但是要养成一个好习惯,就是注意要注销指针p,使程序释放用new开辟的内存空间。
当然使用C++标准模版库(STL)中的vector(向量)也可以实现变长数组:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
//文件名:array02.cpp
#include<iostream>
#include<vector>
using namespace std;
int
main(){
int
len;
cin>>len;
vector<
int
>array(len);
//声明变长数组
for
(
int
i=
0
;i<len;i++)
array[i]=i;
cout<<array[i]<<
"\t"
;
}
return0;
}
|
2.动态指针数组
在构造函数中分配空间: arr = new TYPE*[size]; for(int k=0; k<size;k++) arr[k] = new TYPE; 在析构函数中回收资源: for(int k=0;k<size; k++) delete arr[k]; delete []arr; 再来一个示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
#include <iostream>
using namespace std;
int
main()
{
int
** arr;
arr =
new
int
* [
3
];
for
(
int
k=
0
; k<
3
; k++)
{
arr[k] =
new
int
;
cin>>*arr[k];
}
for
(
int
k=
0
; k<
3
; k++)
cout<<*arr[k]<<
" "
;
cout<<endl;
for
(
int
k=
0
; k<
3
; k++)
delete arr[k];
delete []arr;
return
0
;
}
|
本文转自朱先忠老师51CTO博客,原文链接: http://blog.51cto.com/zhuxianzhong/1531776
,如需转载请自行联系原作者