求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center   Code  
会员   
要资料
 
 
 

C语言和设计模式 教程
开篇
单件模式
原型模式
组合模式
模板模式
工厂模式
责任链模式
抽象工厂模式
迭代器模式
外观模式
代理模式
享元模式
装饰模式
适配器模式
策略模式
中介者模式
建造者模式
桥接模式
观察者模式
备忘录模式
解释器模式
命令模式
状态模式
访问者模式
继承、封装、多态
 
 

迭代器模式
884 次浏览
33次  

使用过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);
}

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

 


您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码: 验证码,看不清楚?请点击刷新验证码 必填



884 次浏览
33次
 捐助