可变长度数组和字符串是需要不断调用LV内存管理器的,因此需要尽量避免,一般是预设数组长度,采用替换数据元素的方法,当空间不足的时候,一次增加一个内存段,这样可以极大地减少Build Array函数的使用次数,当然这样编程比较复杂。如果数据量不大的情况下,还是直接采用 Build Array函数比较方便,毕竟不需要自己管理数据数组的内存空间了。在其他语言中,这种方式称为动态数组。
      Build Array 函数是多态函数,可以一次插入一个元素,也可以一次插入多个元素,或者多维数组插入整行,整列等。今天讨论的是一维数组插入单个元素的问题。
     
一维数组插入元素有两种方式,首端插入和末端插入,其中末端插入即新增加的元素插入到数组的末端,这是队列的常用方式。如要需要的堆栈的方式,则插入元素 必须插入到数组的首端。很少有人注意到这两种方式的使用效率存在极大差别,末端插入的效率要远高于首端插入,如下图所示。
Picture
      如果需要使用堆栈方式,可以首先使用队列方式,然后反转数组,构成堆栈方式,这样就避免了在数组前端插入数据,如下图所示。
Picture
      通常情况下,我们会认为反转数组后,数组元素的实际存储位置会实际反转,尤其对于大型数组,所有的元素在内存中实际颠倒次序会耗费更多的时间。实际上,LV 采用了更聪明的方法,多数情况下,LV 并没有实际改变元素的存储位置。在引用数组元素的时候,LV以最后的元素作为第一个元素的索引,加上的负的反向偏移量,就可以确定数组中的元素。
      使用末端插入元素+反转替代首端插入元素可以改善数组的运行效率。
Picture



Leave a Reply.