目录
为什么
在C++中,规定数组为如下格式:
数据类型 数组名 [常量表达式]
长度不确定意味着无法得到常量表达式,因而不能直接设定数组,要通过特殊方法设定。
怎么做
【方法一】超长数组
在设定时将数组长度设定为1000、100000,只要足够长,一定可以装下需求数组。
弊端:1.占用过多无用存储空间,降低程序执行效率。
2.在实际操作中,往往难以确定需要长度,很难说设定的足够长。
【方法二】new动态分配存储空间
new存放时存入首地址并申请动态空间,从而将不定长度的数组存入。
格式:数据类型 *数组名=new 数据类型[动态长度]
int n;
int *a=new int[n]; //注意定义的是指针
//之后便可按数组方式调用 例如:输入输出
for(int i=0;i<n;i++)
{
cin>>a[i];
cout<<a[i];
}
注意:复杂程序中往往在部分结束时要释放存储空间,使用new创建动态空间,需用delete专门释放new的空间,new不会由系统默认释放。
delete a; //释放单个对象
delete [] a; //释放对象数组
【方法三】vector声明动态数组
vector向量也可声明动态数组,在头文件<vector>中
格式:vector<数据类型> 数组名(动态长度);
#include<vector>
int n;
cin>>n;
vector<int> a(n);
//之后便可按数组方式调用 例如:输入输出
for(int i=0;i<n;i++)
{
cin>>a[i];
cout<<a[i];
}
优点:vector不仅可以做常规的数组操作,还可以进行特殊的操作,例如:
a.push_back(b) //将b接至数组末尾
a.begin() //数组起始
a.erase(m) //擦除第m个元素
a.insert(m,b) //将b插入a[m]的位置
总结
不定长度数组都是通过动态空间进行确定,之后便可通过常规方法进行调用。