动态数组的创建不一定非要new[]
1 动态数组声明格式
data_type array_id[];
其中
data_type为该动态数组中元素的类型;
2 动态数组常用方法
2.1 new
动态数组在使用前可以通过new[number]为其分配空间,其格式如下:
array_id.new[number];
其中
array_id为数组名;
number为指定的数组大小(容量);
示例中,声明了动态数组arr,然后在过程块中使用new[7]给arr开辟了7个元素的空间,每个元素的宽度为8位,并且类型为bit,所以此时如果对数组中的元素进行访问,那么每个元素的值为数据类型的默认值,如本例中为0。示例中代码第5行对数组进行初始化,初始化后,arr中的7个元素就有了初始值。
除了示例中使用new[]直接给动态数组开辟分配空间外,还可以使用下例中的方法实现对数组进行“初始化”。
【示例】
示例中,arr1通过new[7]开辟了空间并进行了初始化,arr2并没有通过new[]开辟空间,但是通过赋值语句实现了arr1到arr2的复制操作,从而实现了对于arr2的初始化。同时,在示例中第8行对arr1的第0个元素进行修改后,将arr1和arr2分别输出,从结果可以看到,arr1的改变并不影响arr2之前复制的值,也就是说,通过赋值语句实现了对于arr2空间的开辟和初始化。示例中复制后的arr1和arr2的大小一样,如果期望给arr2开辟更大的空间并且还保留arr1的内容应该如何实现呢?
【示例】
示例中,使用new[10]给arr2分配10个元素空间并进行复制, 把新的数组arr2开始的7个数用旧的数组arr1中的元素覆盖,即通过new在开辟空间的同时对数组进行了复制操作。这里有一点需要注意,因为给arr2开辟10个元素空间后将arr1中的7个元素复制到了arr2中,所以arr2数组的前7个元素实际上是被赋值了的,但是arr2的最后3个元素是没有赋值的,所以此时对于arr2中没有赋值的空间进行访问时,返回的结果为该数组指定的数据类型的默认值,此示例中arr2数组元素的数据类型为logic,默认值是x,所以arr2[7]\arr2[8]\arr2[9]均为x。
动态数组除了使用new[]这种方式开辟空间外,在使用时,还可以不通过new[]或者复制的方式,直接使用具体的数值对数组进行赋值,此时数组的大小取决于给数组赋值的数值的个数。
【示例】
2.2 删除数组
动态数组可以使用delete()删除数组,删除后的数组不具有任何元素,一般情况下,在使用完对应的数组后,最好都对其占用的空间进行清除操作,这样可以避免存储空间的占用。删除操作格式如下:
array_id.delete();
【示例】
通过上述示例,关于动态数组可以总结以下几点:
Ø 动态数组的容量大小是在程序运行的过程中根据需要指定的;
Ø 动态数组的创建是通过new[]实现的,不是new();
Ø new[]中指定的数字为该动态数组中元素个数;
Ø 对于动态数组开辟空间除了使用new[]方式之外,还可以间接的通过复制其他已经初始化的数组实现;
Ø 可以通过new[]方式开辟新空间的同时复制原数组(另一个被复制数组)中的内容;
Ø 对于数组中未初始化的元素,其值为该数组数据类型的默认值;
Ø 不通过new[]方式开辟空间,可以在具体使用时直接对其进行赋值操作;
Ø 通过delete()删除后的数组,其中没有任何元素,其大小为0;
Ø 通过size()可以获取当前数组的大小;