C语言中也可以方便地进行遍历

  请先看一个例子,如下:

    void test()
    {
        ACL_HTABLE *table = acl_htable_create(10, 0);  /* 创建哈希表 */
        ACL_HTABLE_ITER iter;  /* 哈希表的遍历变量 */
        char *value, key[32];
        int   i;

        for (i = 0; i < 100; i++) {
            value = (char*) acl_mystrdup("value");
            snprintf(key, sizeof(key), "key:%d", i);
            (void) acl_htable_enter(table, key, value);  /* 向哈希表中添加元素 */
        }

        /* 遍历哈希表中的所有元素 */
        acl_htable_foreach(iter, table) {
            printf("%s=%s\n", acl_htable_iter_key(iter), acl_htable_iter_value(iter));
        }

        /* 释放哈希表表 */
        acl_htable_free(table, acl_myfree_fn);
    }

 

    哈,用C语言也可以实现其它编程语言里的迭代器,而且用法也异常简单,虽然它没有C++中的功能强大,但却比较实用,而且操作手法有点象D、JAVA的遍历方式。下面再请看一个利用ACL里的先进先出队列的例子:

 

    void test()
    {
        ACL_FIFO fifo;
        ACL_FIFO_ITER iter;
        char *data;
        int   i;

        acl_fifo_init(&fifo);  /* 初始化队列对象 */

        for (i = 0; i < 10; i++) {
            data = acl_mymalloc(32);
            snprintf(data, 32, "data: %d", i);
            acl_fifo_push(&fifo, data);  /* 向队列中添加元素 */
        }

        /* 反向遍历队列中的所有元素 */
        acl_fifo_foreach_reverse(iter, &fifo) {
            printf("%s\n", (char*) iter.ptr->data);  /* 打印元素字符串 */
        }

        while (1) {
            /* 弹出队列中的所有元素 */
            data = acl_fifo_pop(&fifo);
            if (data == NULL)
                break;
        }
    }
 

      上面这个是ACL里反向遍历先进先出队列的例子。

  我们在使用 C++ 里的迭代器里,其实基本上都是在用C++标准模板库的算法而已,这些常用算法无非也就是动态数组、哈希表、队列、堆栈等数据结构而已,而现在C++的使用替代器的过程未免过于烦琐(模板是由C++发扬光大,但现在搞的也太罗嗦了,不知C++标准委员会里的那些老头整天都在忙些什么,呵呵),我还是比较喜欢Java和D语言里的使用方式。

  上面的两个例子的遍历过程其实是由宏来实现的,效率不会有问题,但写法也未免有些拙劣,呵呵,不过实用即可。具体实现方式请参考ACL里的头文件:lib_acl/include/stdlib/ 下的 acl_htable.h, acl_fifo.h. ACL库下载位置:https://acl.sourceforge.net

 

个人微博:http://weibo.com/zsxxsz

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值