1.3 其他数组类型介绍(1)
1.3.1 动态数组(dynamic array,[])
在前一节,我们简单的介绍了第一种简单的数组------定宽数组,它是指在编译时我们指定数据的宽度,当然,如果对数据预估失误,便会出现越界出错的问题。
设想,如果编译之前我们对于事务(Transaction)大小仍然不确定,盲目的使用定宽数组极有可能发生错误。有没有一种方法能够在程序运行时自动分配存储空间呢,用以匹配事务大小。
1.动态数组的声明
动态数组声明采用空下标[]:
logic exam_1[] , exam_2[] ; //动态数组声明采用空下标
2.动态数组的操作
logic exam_1[] , exam_2[] ; //动态数组声明采用空下标
initial begin
exam_1 = new[3] ; //**new[]操作给数组分配3个存储空间**
foreach (exam_1[j] )
exam_1[j] = j ; //初始化
exam_2 = exam_1 ; //数组复制操作,类比定宽数组
exam_1[2] = 3 ; //更改具体数值
exam_1 = new[10](exam_2) ;//分配10个元素,将exam_2中元素复制给exam_1
exam_1.delete() ; //删除操作
end
1.3.2 队列(Queue,[$])
1. 队列的声明
介绍了定宽数组与动态数组,接下来介绍队列的知识。队列集合了链表与数组的优点,在增加或者删除元素方面优势十分显著,可以通过下标索引实现任意元素访问。
队列声明采用[$]:
queue1[$] = {0 , 1 , 5} ; //注意花括号前没有单引号
queue2[$] = {2 , 3 , 4} ;
2. 队列的函数操作
int i = 1;
initial begin
queue1.insert(5,i) ; //插入操作,{0 , 1 ,1 ,5},1之前插入1
queue2.delete(3) ; //删除操作,{2 , 4},删除元素2
......
end
接下来的操作,一定要理解,非常重要,是***FIFO(先进先出)***的精髓。
queue1.push_front(3) ; //队列最前方插入3,{3 , 0 , 1 , 1 , 5}
queue2.push_back(9) ; //队尾插入9,{2,4,9}
i = queue2.pop_front ; //取出最前边元素,{4 , 9}, i = 2
i = queue1.pop.back ; //取出最后边元素,{3,0,1,1}, i = 5
3. 队列的一般操作
前利用insert,delete,push_front,push_back,pop_front,pop_back这几个函数对队列进行操作,如果不用函数的话,也是可以对队列进行操作的,具体操作如下:
int j =1;
queue1[$] = {0 , 1 , 5} ; //注意花括号前没有单引号
queue2[$] = {2 , 3 , 4} ;
initial begin
q ={queue1[0],queue2[2]} ; //{0,4}
q={queue[0:2],queue2[1:2]} ; //{0,1,5,3,4}
q={5,queue1} ; //{5,0,1,5}
j=q[0] ; // j = 5
q= {} ;//{},删除所有元素
总结:动态数组、队列的声明与操作;队列的函数操作与一般操作;重点掌握FIFO相关函数。希望您能够批评指正!接下来我们将介绍关联数组与数组的操作方法。