设计模式16之c++迭代器模式(含示例代码)

迭代器模式提供顺序访问聚合对象元素的方式,不暴露其内部表示。代码示例中展示了如何用C++实现迭代器和聚合抽象类,以及具体迭代器和聚合类。在main函数中,通过迭代器遍历并输出向量元素,体现了模式将遍历逻辑与数据结构解耦的优点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

迭代器模式是一种行为型设计模式,它提供了一种顺序访问聚合对象中各个元素的方法,而不需要暴露该对象的内部表示。迭代器模式可以用于实现容器类、遍历算法等应用。

下面是一个使用 C++ 实现迭代器模式的示例代码:

#include <iostream>
#include <vector>
// 迭代器抽象类
class Iterator {
public:
    virtual ~Iterator() {}
    virtual int Next() = 0;
    virtual bool HasNext() = 0;
};
// 聚合抽象类
class Aggregate {
public:
    virtual ~Aggregate() {}
    virtual Iterator* CreateIterator() = 0;
};
// 具体迭代器类:向量迭代器
class VectorIterator : public Iterator {
public:
    VectorIterator(std::vector<int>& vector) : vector_(vector), index_(0) {}
    int Next() override {
        int value = vector_[index_];
        index_++;
        return value;
    }
    bool HasNext() override {
        return index_ < vector_.size();
    }
private:
    std::vector<int>& vector_;
    int index_;
};
// 具体聚合类:向量聚合
class VectorAggregate : public Aggregate {
public:
    VectorAggregate() {
        for (int i = 0; i < 10; i++) {
            vector_.push_back(i);
        }
    }
    Iterator* CreateIterator() override {
        return new VectorIterator(vector_);
    }
private:
    std::vector<int> vector_;
};
int main() {
    // 创建向量聚合对象
    VectorAggregate vector_aggregate;
    // 创建向量迭代器对象
    Iterator* iterator = vector_aggregate.CreateIterator();
    // 遍历向量
    while (iterator->HasNext()) {
        std::cout << iterator->Next() << " ";
    }
    std::cout << std::endl;
    // 释放迭代器对象
    delete iterator;
    return 0;
}

在上面的代码中,我们首先定义了一个 Iterator 抽象类,其中包含了 Next() 和 HasNext() 纯虚函数。具体迭代器类 VectorIterator 实现了 Next() 和 HasNext() 函数,以完成向量的遍历。聚合抽象类 Aggregate 定义了 CreateIterator() 纯虚函数,用于创建迭代器。具体聚合类 VectorAggregate 实现了 CreateIterator() 函数,以创建向量迭代器。

在 main() 函数中,我们首先创建了一个向量聚合对象 vector_aggregate,然后通过 CreateIterator() 函数创建了向量迭代器对象 iterator,最后遍历向量并输出结果。在结束遍历后,我们释放了迭代器对象。

迭代器模式的优点在于它将遍历算法与聚合对象分离,使得聚合对象的内部表示不会被暴露。同时,迭代器模式也提供了一种通用的遍历接口,使得遍历算法可以轻松地应用于不同的聚合对象上。但是,由于迭代器模式需要创建迭代器对象,因此它可能会增加系统的开销。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值