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

【设计模式之迭代器模式 -- C++】

迭代器模式 – 遍历集合,无需暴露

迭代器模式是一种设计模式,用于顺序访问集合对象的元素,而无需暴露其底层实现。迭代器模式分离了集合对象的遍历行为,使得访问元素时,可以不必了解集合对象的底层实现。

组成
  1. 迭代器(Iterator)接口:定义访问和遍历元素的接口,通常会有方法如next(), hasNext(), remove()等。
  2. 具体迭代器(Concrete Iterator)类:实现迭代器接口,负责管理遍历集合中的元素。
  3. 集合(Collection)接口:定义创建迭代器对象的接口,允许返回一个可以遍历自身元素的迭代器。
  4. 具体集合(Concrete Collection)类:实现集合接口,当需要遍历该集合的元素时,会创建一个具体的迭代器实例。
优点
  1. 支持多态迭代:迭代器模式允许使用相同的接口遍历不同的集合,支持多态迭代。
  2. 简化集合接口:迭代器承担了遍历集合的职责,简化了集合的接口和实现。
  3. 解耦集合对象与遍历逻辑:使用迭代器模式可以分离集合对象和遍历逻辑,使得两者的修改更加独立。
应用场景
  1. 当你需要访问一个集合对象的内容而无需暴露其内部表示时。
  2. 当你需要对集合有多种遍历方式时。
  3. 当你需要为遍历不同的集合提供一个统一的接口时。
实现
  1. 实现迭代器接口
class Iterator {
public:virtual int next() = 0;virtual bool hasNext() = 0;
};
  1. 具体迭代器实现
class ConcreteIterator : public Iterator {
private:std::vector<int> data;int position;public:ConcreteIterator(const std::vector<int>& data) : data(data), position(0) {}int next() override {return data[position++];}bool hasNext() override {return position < data.size();}
};
  1. 容器接口和具体实现
class Container {
public:virtual Iterator* createIterator() = 0;
};// 具体容器实现
class ConcreteContainer : public Container {
private:std::vector<int> data;public:void add(int value) {data.push_back(value);}Iterator* createIterator() override {return new ConcreteIterator(data);}
};
  1. 测试
int main() {ConcreteContainer container;container.add(1);container.add(2);container.add(3);Iterator* iterator = container.createIterator();while (iterator->hasNext()) {std::cout << iterator->next() << " ";}std::cout << std::endl;delete iterator;return 0;
}
  1. 结果
1 2 3 
http://www.lryc.cn/news/385216.html

相关文章:

  • Linux网络编程:套接字编程
  • 多电商账户为什么要用指纹浏览器?
  • 用Rancher2.8.5部署K8s集群
  • 未来已来,如何打造智慧养殖场?
  • 代码随想录算法训练营第七天|454.四数相加II、383. 赎金信、15. 三数之和、18. 四数之和
  • Python和tkinter实现的字母记忆配对游戏
  • Leetcode Hot100之链表
  • 5.9k!一款清新好用的后台管理系统!【送源码】
  • Vue-cli搭建项目----基础版
  • python之__call__函数介绍
  • 【AI】生成式AI服务器最低配置
  • 2.Android逆向协议-了解常用的逆向工具
  • 大数据------额外软件、插件及技术------Linux(完整知识点汇总)
  • iOS 其他应用的文件如何在分享中使用自己的应用打开
  • 【编译原理必考大题】 推导构建语法树,写出语法树的短语,简单短语和句柄
  • redis服务介绍
  • nodepad 中换行符、tab替换
  • 常见的字符串函数(包含头文件string.h)和字符函数(2)
  • Python | Leetcode Python题解之第187题重复的DNA序列
  • SpringCloud分布式微服务链路追踪方案:Skywalking
  • 首次线下联合亮相!灵途科技携手AEye、ATI亮相2024 EAC 易贸汽车产业大会
  • 一文入门CMake
  • 【LeetCode面试经典150题】117. 填充每个节点的下一个右侧节点指针 II
  • RTDETR更换优化器——Lion
  • Spring Boot中最佳实践:数据源配置详解
  • 第1章 物联网模式简介---独特要求和体系结构原则
  • 数据挖掘概览
  • 【学习】软件测试中常见的文档类型及其作用
  • electron的托盘Tray
  • Harmony OS UI框架探索笔记