【C++】迭代器模式

发布于:2025-07-02 ⋅ 阅读:(17) ⋅ 点赞:(0)

迭代器模式(Iterator Pattern)是一种【行为型】设计模式,它提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。这种模式将遍历逻辑封装在迭代器对象中,使客户端可以统一使用迭代器来访问不同类型的聚合对象,无需关心对象的具体实现。

一、模式核心概念与结构

迭代器模式包含四个核心角色:

  1. 迭代器接口(Iterator):定义访问和遍历元素的接口,如next()hasNext()等方法。
  2. 具体迭代器(Concrete Iterator):实现迭代器接口,跟踪聚合对象中的当前位置。
  3. 聚合接口(Aggregate):定义创建迭代器对象的接口,如createIterator()方法。
  4. 具体聚合(Concrete Aggregate):实现聚合接口,创建与之对应的具体迭代器。

二、C++ 实现示例:自定义集合迭代器

以下是一个简单的迭代器模式示例,演示如何为自定义集合实现迭代器:

#include <iostream>
#include <memory>
#include <vector>

// 前向声明
template <typename T> class Iterator;
template <typename T> class ConcreteAggregate;

// 迭代器接口
template <typename T>
class Iterator {
   
public:
    virtual ~Iterator() = default;
    virtual bool hasNext() const = 0;
    virtual T next() = 0;
};

// 聚合接口
template <typename T>
class Aggregate {
   
public:
    virtual ~Aggregate() = default;
    virtual std::shared_ptr<Iterator<T>> createIterator() = 0;
};

// 具体迭代器
template <typename T>
class ConcreteIterator : public Iterator<T> {
   
private:
    std::shared_ptr<std::vector<T>> collection;
    size_t position;

public:
    ConcreteIterator(std::shared_ptr<std::vector<T>> coll)
        : collection(coll), position(0) {
   }
    
    bool hasNext() const override {
   
        return position < collection->size();
    }
    
    T next() override {
   
        if (hasNext(

网站公告

今日签到

点亮在社区的每一天
去签到