C语言中也可以方便地进行遍历
来源:互联网 发布:安卓性能优化 编辑:程序博客网 时间:2024/05/17 22:21
请先看一个例子,如下:
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
- C语言中也可以方便地进行遍历
- Powerdesigner可以在数据模型中方便地生成测试数据
- C语言中&操作符可以进行哪些运算?
- C语言也可以“面向对象”
- vim可以很方便地编辑二进制文件
- 在 MVVM 中使用 RACSubject 可以非常方便地实现统一的错误处理逻辑
- 原来C语言也可以面向对象(一)
- 不要暴力,也可以很容易地解题
- C语言中main函数之前可以进行赋值作吗?
- SandBox中方便、精确地选择物品
- 定义宏可以方便地访问stl容器
- C语言也可以“面向对象”—— C语言实现封装、继承和多态
- [c++]一个对MSXML的封装类 使用C++的Smart Pointer 对MSXML DOM封装,可以方便地访问xml文件
- [c++]一个对MSXML的封装类 使用C++的Smart Pointer 对MSXML DOM封装,可以方便地访问xml文件
- [c++]一个对MSXML的封装类 使用C++的Smart Pointer 对MSXML DOM封装,可以方便地访问xml文件
- [c++]一个对MSXML的封装类 使用C++的Smart Pointer 对MSXML DOM封装,可以方便地访问xml文件
- [c++]一个对MSXML的封装类 使用C++的Smart Pointer 对MSXML DOM封装,可以方便地访问xml文件
- CheckBox也可以进行单选
- dmd.2.029 编译过程
- face list
- 开发多线程进程池服务器程序---acl 服务器框架应用
- LDP标签分发协议——rfc5036提取笔记
- 设置自定义有动画dialog
- C语言中也可以方便地进行遍历
- 常见的Java异常
- 反向代理
- 小谈C语言中常见数据类型在32及64位机上的使用
- BestCoder Round #8 A,B,C
- ACL缓存开发
- 创建多级目录
- 先进先出队列
- 配置文件的读取