返回

C语言和设计模式(迭代器模式)

发布时间:2023-09-18 09:08:30 202

    使用过C++的朋友大概对迭代器模式都不会太陌生。这主要是因为我们在编写代码的时候离不开迭代器,队列有迭代器,向量也有迭代器。那么,为什么要迭代器呢?这主要是为了提炼一种通用的数据访问方法。

    比如说,现在有一个数据的容器,

typedef struct _Container
{
int* pData;
int size;
int length;

Interator* (*create_new_interator)(struct _Container* pContainer);
int (*get_first)(struct _Container* pContainer);
int (*get_last)(struct _Container* pContainer);

}Container;

    我们看到,容器可以创建迭代器。那什么是迭代器呢?

typedef struct _Interator
{
void* pVector;
int index;

int(* get_first)(struct _Interator* pInterator);
int(* get_last)(struct _Interator* pInterator);
}Interator;

   我们看到,容器有get_first,迭代器也有get_first,这中间有什么区别?

int vector_get_first(struct _Container* pContainer)
{
assert(NULL != pContainer);

return pContainer->pData[0];
}

int vector_get_last(struct _Container* pContainer)
{
assert(NULL != pContainer);

return pContainer->pData[pContainer->size -1];
}

int vector_interator_get_first(struct _Interator* pInterator)
{
Container* pContainer;
assert(NULL != pInterator && NULL != pInterator->pVector);

pContainer = (struct _Container*) (pInterator->pVector);
return pContainer ->get_first(pContainer);
}

int vector_interator_get_last(struct _Interator* pInterator)
{
Container* pContainer;
assert(NULL != pInterator && NULL != pInterator->pVector);

pContainer = (struct _Container*) (pInterator->pVector);
return pContainer ->get_last(pContainer);
}

    看到上面的代码之后,我们发现迭代器的操作实际上也是对容器的操作而已。




特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
精选文章
thumb 中国研究员首次曝光美国国安局顶级后门—“方程式组织”
thumb 俄乌线上战争,网络攻击弥漫着数字硝烟
thumb 从网络安全角度了解俄罗斯入侵乌克兰的相关事件时间线
下一篇
C语言和设计模式(责任链模式) 2023-09-18 06:18:59