C++设计模式之迭代器模式怎么实现
发表于:2025-01-16 作者:千家信息网编辑
千家信息网最后更新 2025年01月16日,本文小编为大家详细介绍"C++设计模式之迭代器模式怎么实现",内容详细,步骤清晰,细节处理妥当,希望这篇"C++设计模式之迭代器模式怎么实现"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来
千家信息网最后更新 2025年01月16日C++设计模式之迭代器模式怎么实现
本文小编为大家详细介绍"C++设计模式之迭代器模式怎么实现",内容详细,步骤清晰,细节处理妥当,希望这篇"C++设计模式之迭代器模式怎么实现"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
迭代器在STL运用广泛,类似容器的迭代已经成为其重要特性,而迭代器模式则是利用迭代器概念进行的抽象运用,迭代器模式运用广泛和有用,因为其能够不考虑数据的存储方式,而是直接面对数据进行迭代,也就是说我们不用考虑集合是数组(或vector)、链表、栈还是队列,而是通过统一的接口进行顺序的访问。
作用
迭代器模式提供了一种顺序访问容器中元素的方法,而无需了解器内部的类型和结构,该模式的核心思想将访问和遍历容器对象的功能交给一个外部的迭代器对象,该迭代器定义了访问聚合对象的接口,
类视图
实现
class Item{public: Item(string strName,float price): m_name(strName),m_price(price){} Item(Item& item): m_name(item.strName),m_price(item.price){} string tostring() { std::ostringstream buffer; buffer << f; string strPrice = buffer.str(); strName += " :"; return strName + strPrice; }private: string m_name; float m_price;}class Container;class Menu;class Iterator{public: virtual ~Iterator(){} virtual void first()=0; virtual void next()=0; virtual bool hasnext()=0; virtual Item* current()=0;protected: Container * m_pContainer;}class Container {public: virtual ~Container() {}; virtual void CreateIterator()= 0; protected: Observer(){};};class MenuIterator : public Iterator{ Menu * m_menu; int curpos; public: MenuIterator(Menu*a):m_menu(a),curpos(0){} virtual void first() { curpos=0; } virtual void next() { curpos++; } virtual bool hasnext() { if(curpos >=0 && curpos< m_menu->size()) } virtual Item* current() { return m_menu->value(curpos); }}; class Menu : public Container{public: virtual ~Menu() { for(int i=0 ; i< m_items.size(); i++) { delete m_items[i]; } }; Iterator* CreateIterator() { return new MenuIterator(this); } int size() { return m_items.size(); } Item* value(int nIndex) { if(nIndex>=0 && nIndexm_items; };int main(){ Item it1("chicken", 10.0); Item it2("Apple", 5.0); Item it3("Beaf", 20.0); Item it4("soup",15.0); Menu menu; menu.additem(it1); menu.additem(it2); menu.additem(it3); menu.additem(it4); Iterator itor = menu.CreateIterator(); while(itor->hasnext()) { Item* pItem = itor->current(); if(pItem) cout< tostring()< next(); }}
对于上例来说,Iterator接口是不变的,不管menu中的聚合内容的形式如何变化,只要menu根据其类型提供其取值、大小等的操作,那么对于使用者来说都是一样的操作。
应用场景
访问一个聚合对象的内容而无需暴露它的内部表示;
支持对聚合对象的多种遍历(从前到后,从后到前);
为遍历不同的聚合结构提供一个统一的接口,支持多态迭代。
读到这里,这篇"C++设计模式之迭代器模式怎么实现"文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注行业资讯频道。
迭代
模式
对象
内容
接口
设计模式
C++
设计
容器
文章
数据
类型
结构
而是
顺序
支持
统一
不同
多态
妥当
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
udi数据库怎么创建
免费国内代理服务器
沈阳android软件开发流程
俊利电脑软件开发部
什么操作系统用于高端服务器中
数据库sql数据库误删
古交软件开发生产商
数据库表名称规则
安卓软件开发兼职
有什么比较冷门的服务器
人大视察公安机关网络安全
excel表格导入数据库
南海区学前教育基础信息数据库
关于网络安全优秀征文500字
数据库无法删除字段类型
塔科夫俄版能玩哪些服务器
计算机网络技术设计游戏作业
以太网串口服务器多少钱
网络安全顾问具备那些
网络安全手抄报不涂颜色
网络安全培训宣传稿件
阿里云 服务器 欧洲
我的门派服务器怎么换
中国邮政人寿网络安全招标
江苏省信息网络安全协会官网
网络安全法确定了什么主体
javamysql数据库结构
葫芦娃网络安全热点
美萍酒店管理系统连接服务器
高青mrp软件开发公司