当前位置: 首页 > news >正文

公司网站建设策划方案哈尔滨网站设计定制

公司网站建设策划方案,哈尔滨网站设计定制,在家做的手工活哪里有网站,建一个pc网站需要多少钱意图:提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。 上下文:集合对象内部结构常常变化各异。对于这些集合对象,能否在不暴露其内部结构的同时,让外部Client透明地访问其中包含的元素…

意图:提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。

上下文:集合对象内部结构常常变化各异。对于这些集合对象,能否在不暴露其内部结构的同时,让外部Client透明地访问其中包含的元素,同时让这种“透明遍历”也为“同一种算法在多种集合对象上进行操作”提供可能?

UML

在这里插入图片描述

Iterator:定义访问和遍历元素的接口(.NET中定义了标准的IEnumrator接口)。ConcreteIterator:实现Iterator接口,同时在对Aggregate遍历时跟踪当前的位置。Aggregate:定义创建相应Iterator对象的接口(.NET中定义了标准的IEnumrable接口)。ConcreteAggregate:实现创建相应Iterator对象的接口,该操作返回一个适当的ConcreteIterator实例。

注意:.NET中的foreach关键字在编译时会自动创建迭代器对象,并使用该对象对集合进行遍历。.NET中的yield return关键字使得定义迭代器对象更加容易。

代码

#include <iostream>
#include <list>
#include <array>
#include <vector>
using namespace std;//Iterator迭代器抽象类
class Iterator
{
public:virtual void* First() = 0;virtual void* Next() = 0;virtual bool IsDone() = 0;virtual void* CurrentItem() = 0;
};//Aggregate聚集抽象类
class Aggregate
{
public:virtual Iterator *CreateIterator() = 0;
};//ConcreteAggregate具体聚集类 继承Aggregate
class ConcreteAggregate:public Aggregate
{
public:vector<void*> items;// Aggregate interface
public:Iterator *CreateIterator();int getCount() const;//既可以作为左值,也可以作为又值void** operator[](unsigned int index){if(items.size() <= index){items.resize(index+1);}return &items[index];}
};class ConcreteIterator:public Iterator
{
public:ConcreteAggregate *ca;int current;ConcreteIterator(ConcreteAggregate *c):ca(c){this->current = 0;}virtual void* First();virtual void* Next();virtual bool IsDone();virtual void* CurrentItem();
};Iterator *ConcreteAggregate::CreateIterator()
{return new ConcreteIterator(this);
}int ConcreteAggregate::getCount() const
{return items.size();
}void *ConcreteIterator::First()
{return *(*ca)[0];
}void *ConcreteIterator::Next()
{if(current < ca->getCount()){current++;}if(current < ca->getCount()){return *(*ca)[current];}return nullptr;
}bool ConcreteIterator::IsDone()
{return current >= ca->getCount()?true:false;
}void *ConcreteIterator::CurrentItem()
{return *(*ca)[current];
}class ConcreteIteratorDesc:public Iterator
{
public:ConcreteAggregate *ca;int current;ConcreteIteratorDesc(ConcreteAggregate *c):ca(c){this->current = c->getCount() - 1;}virtual void* First();virtual void* Next();virtual bool IsDone();virtual void* CurrentItem();
};
void *ConcreteIteratorDesc::First()
{if(ca->getCount() == 0){return nullptr;}return *(*ca)[ca->getCount() - 1];
}void *ConcreteIteratorDesc::Next()
{if(current >= 0){current--;}if(current >= 0){return *(*ca)[current];}return nullptr;
}bool ConcreteIteratorDesc::IsDone()
{return current < 0?true:false;
}
void *ConcreteIteratorDesc::CurrentItem()
{return *(*ca)[current];
}
int main()
{ConcreteAggregate ca;*(ca[0]) = (void*)5;*ca[1] = (void*)10;*ca[2] = (void*)15;*ca[3] = (void*)20;
//    cout << (int) *ca[0] << endl;
//    cout << (int) *ca[1] << endl;
//    cout << ca.getCount() << endl;Iterator *i = new ConcreteIterator(&ca);cout << "开始遍历" << endl;while(!i->IsDone()){cout << (int)i->CurrentItem() << endl;i->Next();}Iterator *i_desc = new ConcreteIteratorDesc(&ca);cout << "开始反向遍历" << endl;while(!i_desc->IsDone()){cout << (int)i_desc->CurrentItem() << endl;i_desc->Next();}cout << "--end--" << endl;return 0;
}

结果:

开始遍历
5
10
15
20
开始反向遍历
20
15
10
5
--end--
http://www.yayakq.cn/news/714923/

相关文章:

  • 购物网站建设优势wordpress 技术文档
  • 微网站开发平台免费建站哪家好社区
  • 交网站建设域名计入什么科目想做棋牌网站怎么做
  • O2O网站开发工程师wang域名建的网站
  • 网站开发的数据库技术怎么联系百度推广
  • 做外贸网站 用国外空间 还是 国内空间 区别胶州市网站建设
  • 广东创粤建设有限公司网站图片转短链接生成器
  • 国外有名的设计网站Apple 手机网站制作
  • 长泰网站建设网站建设运营策划方案
  • 做医疗健康类网站需要资质吗门户网登录入口
  • 软文范文200字seo网站关键词排名优化
  • 电子商务的网站案例石家庄网络公司查封
  • 网站建设案例讯息怎样换网站logo
  • wordpress圆角阴影seo系统是什么意思
  • 那个网站做港货比较好有哪些做电子商务的网站
  • 服装企业网站模版wordpress 短网址插件
  • 网站有没有做等级测评怎么查看百度网站适配代码
  • 平陆县做网站怎样提高网站的打开速度
  • 潍坊哪家做网站做的最好网站建设需要摊销吗
  • 石家庄住房城乡建设厅网站深圳坪山比亚迪
  • 网站建设与运营总结在互联网公司上班都做啥的
  • 自己做电影网站有没有钱赚wordpress 二级链接
  • 网站建设源码修改网站备案幕布多少钱
  • 影响网站显示度的原因优秀网站制作定制
  • 工程承包去哪个网站ps和vscode做网站
  • 网站没有域名网络公司怎样推广网站
  • 网站建设专业的室内设计联盟官网论坛
  • 北京国家建设部网站首页中国网站制作企业排行榜
  • 网站js聊天代码做二手货的网站有哪些
  • 松江洞泾网站建设云南网站开发网络公司前10