迭代器模式c++

在C++中实现迭代器模式,你需要创建一个迭代器接口,以及一个或多个具体的迭代器类来实现该接口。此外,还需要一个聚合类,它包含了元素集合以及创建迭代器的方法。迭代器模式使得客户端能够遍历或访问聚合对象中的元素,而无需暴露其内部表示。

下面是一个简单的示例,说明如何在C++中实现迭代器模式:

首先,定义一个迭代器接口(Iterator)和聚合接口(Aggregate),以及具体的迭代器和聚合类。

#include <vector>
#include <iostream>

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

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

// 具体聚合类
template<typename T>
class ConcreteAggregate : public Aggregate<T> {
private:
    std::vector<T> items;
public:
    int getSize() const {
        return items.size();
    }
    void addItem(T item) {
        items.push_back(item);
    }
    T getItem(int index) const {
        return items.at(index);
    }
    Iterator<T>* createIterator() override;
};

// 具体迭代器类
template<typename T>
class ConcreteIterator : public Iterator<T> {
private:
    const ConcreteAggregate<T>* aggregate;
    int index;
public:
    ConcreteIterator(const ConcreteAggregate<T>* aggregate) : aggregate(aggregate), index(0) {}
    bool hasNext() override {
        return index < aggregate->getSize();
    }
    T next() override {
        return aggregate->getItem(index++);
    }
};

// 为ConcreteAggregate定义createIterator
template<typename T>
Iterator<T>* ConcreteAggregate<T>::createIterator() {
    return new ConcreteIterator<T>(this);
}

// 使用示例
int main() {
    ConcreteAggregate<int> aggregate;
    aggregate.addItem(1);
    aggregate.addItem(2);
    aggregate.addItem(3);

    Iterator<int>* iterator = aggregate.createIterator();
    while (iterator->hasNext()) {
        std::cout << iterator->next() << std::endl;
    }

    delete iterator;
    return 0;
}

在这个示例中,Iterator是一个模板接口,定义了hasNextnext方法。Aggregate是另一个模板接口,声明了createIterator方法。ConcreteAggregate是一个具体的聚合类,它包含了一个元素集合,并实现了createIterator方法,该方法返回一个ConcreteIterator实例。ConcreteIterator是一个具体的迭代器类,它实现了迭代器接口,并能够遍历ConcreteAggregate中的元素。

通过这种方式,客户端代码可以通过迭代器接口遍历聚合对象中的元素,而不需要知道聚合对象的内部结构。这提高了代码的抽象级别和可重用性。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值