我是靠谱客的博主 魔幻天空,最近开发中收集的这篇文章主要介绍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~~

最后

以上就是魔幻天空为你收集整理的C语言--迭代器的实现。的全部内容,希望文章能够帮你解决C语言--迭代器的实现。所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部