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);