当前位置:主页   - 电脑 - 程序设计 - C/C++
C语言中迭代器的设计与使用
来源:网络   作者:zsxxsz   更新时间:2011-04-10
收藏此页】    【字号    】    【打印】    【关闭

  经常使用C++、JAVA等面向对象语言开发的程序员都会比较喜欢容器的迭代器功能,用起来方便简洁。象一些常用的数据结构,如:哈希表、动态数组、链表等,在这些面向对象语言中都可以非常方便地使用迭代器。当然,在C语言中也有对这些常用数据结构的函数封装,但要对容器中元素的遍历,则一般会通过注册回调函数的方式。如下:

  C代码

/* 以C语言中非常流行的 glib 库中的哈希表操作为例 */ 
 
static void print_record(gpointer key, gpointer val, gpointer ctx) 
{ 
  printf("%s: key(%s), value(%s)\n", (char*) ctx, (char*) key, (char*) val)); 
} 
 
static void free_record(gpointer key, gpointer val, gpointer ctx) 
{ 
  printf("%s: free(%s) now\n", (char*) ctx, (char*) key); 
  free(val); 
} 
 
static void htable_test(void) 
{ 
  char *myname = "hash_test"; 
  char key[32], *value; 
  GHashTable *table; 
  int  i; 
 
  /* 创建哈希表 */ 
  table = g_hash_table_new(g_str_hash, g_str_equal); 
 
  /* 依次向哈希表中添加数据 */ 
  for (i = 0; i < 10; i++) { 
     snprintf(key, sizeof(key), "key:%d", i); 
    value = malloc(64); 
    snprintf(value, 64, "value:%d", i); 
    g_hash_table_insert(table, key, value); 
  } 
 
  /* 遍历并输出哈希表中的数据 */ 
  g_hash_table_foreach(table, print_record, myname); 
 
  /* 依次释放哈希表中的数据 */ 
  g_hash_table_foreach(table, free_record, myname); 
 
  /* 销毁哈希表 */ 
  g_hash_table_destroy(table); 
}

其它资源
来源声明

版权与免责声明
1、本站所发布的文章仅供技术交流参考,本站不主张将其做为决策的依据,浏览者可自愿选择采信与否,本站不对因采信这些信息所产生的任何问题负责。
2、本站部分文章来源于网络,其版权为原权利人所有。由于来源之故,有的文章未能获得作者姓名,署“未知”或“佚名”。对于这些文章,有知悉作者姓名的请告知本站,以便及时署名。如果作者要求删除,我们将予以删除。除此之外本站不再承担其它责任。
3、本站部分文章来源于本站原创,本站拥有所有权利。
4、如对本站发布的信息有异议,请联系我们,经本站确认后,将在三个工作日内做出修改或删除处理。
请参阅权责声明