欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

重新总结C++中的动态数组原理

最编程 2024-01-06 18:45:15
...

动态数组是指在编译时不能确定数组长度,程序在运行时需要动态分配内存空间的数组。

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;