C语言--迭代器的实现。

*引用本文请注明来自 blog.csdn.net/wtz1985       

在上一篇文章中,已经介绍了为什么要实现容器和怎样实现容器,这章将要介绍的是----怎样在容器里把算法分离出来,在容器里,只是实现了基本接口定义,可是对于具体的操作,比如移动到一下结点、比较两个结点的值等,容器并没有实现。从容器中把这些算法分离出来就是所谓的迭代器(iterator)。下面将是一些代码的接口实现:

1、接口定义。

  1. /*-------- iterator.h --------*/
  2. #ifndef _ITERATOR_H
  3. #define _ITERATOR_H
  4. struct _Iterator;
  5. typedef struct _Iterator Iterator;
  6. typedef void (*IteratorNextFunc)(Iterator* thiz);
  7. typedef void (*IteratorPrevFunc)(Iterator* thiz);
  8. typedef void (*IteratorAdvanceFunc)(Iterator* thiz, size_t off_set);
  9. typedef void (*IteratorBeginFunc)(Iterator* thiz);
  10. typedef void (*IteratorEndFunc)(Iterator* thiz);
  11. typedef int  (*IteratorCompareFunc)(Iterator* x, Iterator* y);
  12. typedef void (*IteratorSetFunc)(Iterator* thiz, void* data);
  13. typedef void* (*IteratorGetFunc)(Iterator* thiz);
  14. typedef void (*IteratorDestroyFunc)(Iterator* thiz);
  15. struct _Iterator
  16. {
  17.   IteratorNextFunc      next;
  18.   IteratorPrevFunc      prev;
  19.   IteratorAdvanceFunc   advance;
  20.   IteratorBeginFunc     begin;
  21.   IteratorEndFunc       end;
  22.   IteratorCompareFunc   compare;
  23.   IteratorSetFunc       set;
  24.   IteratorGetFunc       get;
  25.   IteratorDestroyFunc   destroy;
  26. };
  27. static inline void iterator_next(Iterator* thiz)
  28. {
  29.   assert(thiz != NULL && thiz->next != NULL);
  30.   thiz->next(thiz);
  31.   return ;
  32. }
  33. static inline void iterator_prev(Iterator* thiz)
  34. {
  35.   assert(thiz != NULL && thiz->prev != NULL);
  36.   thiz->prev(thiz);
  37.   return ;
  38. }
  39. static inline void iterator_advance(Iterator* thiz, size_t off_set)
  40. {
  41.   assert(thiz != NULL && thiz->advance != NULL);
  42.   thiz->advance(thiz, off_set);
  43.   return ;
  44. }
  45. .......
  46. #endif

2、不同的接口实现:

链表方式

  1. /*--------iterator_list.h---------*/
  2. #ifndef _ITERATOR_LIST_H
  3. #define _ITERATOR_LIST_H
  4. #include "iterator.h"
  5. Iterator* iterator_list_create(DList* thiz);
  6. #endif

动态数组方式:

  1. /*--------iterator_vector.h---------*/
  2. #ifndef _ITERATOR_VECTOR_H 
  3. #define _ITERATOR_VECTOR_H 
  4. #include "iterator.h" 
  5. Iterator* iterator_vector_create(Vector* thiz); 
  6. #endif

上面是迭代器接口的实现,具体的操作就不在这实现了。有了容器和迭代器这两个中间接口,就可以很自由的选择适合的结构实现自己的函数。有写的不好的地方,希望多指教。

 

~~END~~

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值