7.3.3 使用动态数组的例子

本节以一个简单的例子说明如何使用动态数组。这里仍然以7.2.3中介绍的TestNode作为数组中的元素类型。首先,调用ngx_array_create方法创建动态数组,代码如下。


ngx_array_t*dynamicArray=ngx_array_create(cf->pool,1,sizeof(TestNode));


这里创建的动态数组只预分配了1个元素的空间,每个元素占用的内存字节数为sizeof(TestNode),也就是TestNode结构体占用的空间大小。

然后,调用ngx_array_push方法向dynamicArray数组中添加两个元素,代码如下。


TestNode*a=ngx_array_push(dynamicArray);

a->num=1;

a=ngx_array_push(dynamicArray);

a->num=2;


这两个元素的num值分别为1和2。注意,在添加第2个元素时,实际已经发生过一次扩容了,因为调用ngx_array_create方法时只预分配了1个元素的空间。下面尝试用ngx_array_push_n方法一次性添加3个元素,代码如下。


TestNode*b=ngx_array_push_n(dynamicArray,3);

b->num=3;

(b+1)->num=4;

(b+2)->num=5;


这3个元素的num值分别为3、4、5。下面来看一下是如何遍历dynamicArray动态数组的,代码如下。


TestNode*nodeArray=dynamicArray->elts;

ngx_uint_t arraySeq=0;

for(;arraySeq<dynamicArray->nelts;arraySeq++)

{

a=nodeArray+arraySeq;

//下面处理数组中的元素a

……

}


了解了遍历dynamicArray动态数组的方法后,再来看一下销毁动态数组的方法,这就非常简单了,如下所示:


ngx_array_destroy(dynamicArray);