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.net

相關文章
相關標籤/搜索