动态数组

转载 2007年09月14日 10:44:00
 动态数组


数组到底应该有多大才合适,有时可能不得而知。所以希望能够在运行时具有改变数组大小的能力。

动态数组就可以在任何时候改变大小。在 Visual Basic 中,动态数组最灵活、最方便,有助于有效管理内存。例如,可短时间使用一个大数组,然后,在不使用这个数组时,将内存空间释放给系统。

如果不用动态数组,就要声明一个数组,它的大小尽可能达到最大,然后再抹去那些不必要的元素。但是,如果过度使用这种方法,会导致内存的操作环境变慢。

要创建动态数组,请按照以下步骤执行:

(如果希望数组为公用数组,则)用 Public 语句声明数组,或者,(如果希望数组为模块级,则)在模块级用 Dim 语句声明数组,或者(如果希望数组为局部数组,则)在过程中用 Static 或 Dim 语句声明数组。给数组附以一个空维数表,这样就将数组声明为动态数组。
Dim DynArray ()

用 ReDim 语句分配实际的元素个数。
ReDim DynArray (X + 1)

ReDim 语句只能出现在过程中。与 Dim 语句、Static 语句不同,ReDim 语句是一个可执行语句,由于这一语句,应用程序在运行时执行一个操作。

ReDim 语句支持这样的语法,它与固定数组中使用的语法相同。对于每一维数,每个 ReDim 语句都能改变元素数目以及上下界。但是,数组的维数不能改变。

ReDim DynArray (4 to 12)

例如,用第一次声明在模块级所建立的动态数组 Matrix1:

Dim Matrix1 () As Integer

然后,在过程中给数组分配空间:

Sub CalcValuesNow ()
   .
   .
   .
   ReDim Matrix1 (19, 29)
End Sub

这里的 ReDim 语句给 Matrix 分配一个 20 × 30 的整数矩阵(元素总大小为 600)。还有一个办法,用变量设置动态数组的边界:

ReDim Matrix1 (X, Y)

注意 您可以将字符串赋值给大小可变的字节数组。一个字节数组也可以被赋值给一个可变长的字符串。一定要注意字符串中的字节数会随平台而变化。同一个字符串在 Unicode 平台上的字节数是它在非 Unicode 平台上的两倍。

保留动态数组的内容
每次执行 ReDim 语句时,当前存储在数组中的值都会全部丢失。Visual Basi 重新将数组元素的值置为 Empty(对 Variant 数组)、置为 0(对 Numeric 数组)、置为 零长度字符串(对 String 数组)或者置为 Nothing(对于对象的数组)。

在为新数据准备数组,或者要缩减数组大小以节省内存时,这样做是非常有用的。有时希望改变数组大小又不丢失数组中的数据。使用具有 Preserve 关键字的 ReDim 语句就可做到这点。例如,使用 UBound 函数引用上界,使数组扩大、增加一个元素,而现有元素的值并未丢失:

ReDim Preserve DynArray (UBound (DynArray) + 1)

在用 Preserve 关键字时,只能改变多维数组中最后一维的上界;如果改变了其它维或最后一维的下界,那么运行时就会出错。所以可这样编程:

ReDim Preserve Matrix (10, UBound (Matrix, 2) + 1)

而不可这样编程:

ReDim Preserve Matrix (UBound (Matrix, 1) + 1, 10)

详细信息 关于动态数组的更详细信息,请参阅语言参考中的“ReDim 函数”。关于对象数组,请参阅“用对象编程”。

c++ vector 动态数组用法

在c++中,vector是一个十分有用的容器,下面对这个容器做一下总结。 1 基本操作 (1)头文件#include. (2)创建vector对象,vector vec; (3...
  • clover_hxy
  • clover_hxy
  • 2016年02月19日 17:03
  • 1062

动态数组对比STL vector及其实现(c/c++)

c/c++动态数组动态数组 顾名思义能 动态增加内存的数组。 STL标准库中的vector具有类似的功能,c标准库的realloc也具有类似的功能,那为何还需要自己实现动态内存方式呢?对于追求效率,和...
  • typename
  • typename
  • 2012年11月20日 11:29
  • 6332

asp动态数组

本文所说的 ASP 数组是指在 ASP 中以默认语言 VBScript 为语言的数组。 例子: Dim   MyArray()        for   i   =   0   to  ...
  • yyh1988923
  • yyh1988923
  • 2011年09月23日 09:36
  • 5367

C++动态数组使用方法

二维数组直接开辟内存,与JAVA非常相似只是多了一个星号,使用完毕需要释放,否则内存泄漏 int* arr1=new int[5]; for(int i=0;i...
  • miko_xiaoming
  • miko_xiaoming
  • 2015年08月31日 16:57
  • 1426

一维动态数组的实现(c语言)

编程输入一个班的某课程的学生成绩,计算其平均分,然后输出。班级人数由键盘输入。#include #include main() { int *p = NULL,i,n,sum; pr...
  • m_hahahaha1994
  • m_hahahaha1994
  • 2016年06月07日 16:15
  • 3171

一维动态数组和二维动态数组的创建和使用

c,c的动态数组,一维数组,二维数组
  • wj903829182
  • wj903829182
  • 2014年07月17日 08:09
  • 1732

fortran F90动态数组的基本使用示范

program sample parameter (row = 5) integer err_mesg integer ary1(:), ary11(:, :...
  • shifuwawa
  • shifuwawa
  • 2011年03月15日 21:28
  • 7443

Java动态数组ArrayList

List 接口的大小可变数组的实现。实现了所有可选列表操作,并允许包括null 在内的所有元素。除了实现 List 接口外,此类还提供一些方法来操作内部用来存储列表的数组的大小。(此类大致上等同于Ve...
  • fengyuzhengfan
  • fengyuzhengfan
  • 2014年09月04日 19:54
  • 3433

C语言动态数组原理及实现

近来编写几个程序,很多都用到了数组。但是对于数组的大小却是没有固定的,也就是说可以更改数组大小,其大小是可以变化的。并不像初学时的那样,告诉你一个范围,你就必须取最大值以满足要求。那样可能就会浪费很多...
  • u013398034
  • u013398034
  • 2016年07月11日 16:48
  • 6880

c# 定义动态数组方法

c# 定义动态数组方法:         private Vector3 []a  ; //保存点的位置 private float []v  ;//保存从数据库中读取的float数值 ...
  • woailvmengmeng
  • woailvmengmeng
  • 2013年11月12日 14:17
  • 3111
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:动态数组
举报原因:
原因补充:

(最多只允许输入30个字)