C++设计模式——迭代器模式(Iterator)

本文介绍了迭代器模式,它提供了一种不暴露聚合对象内部结构的情况下顺序访问其中元素的方法。通过示例代码展示了如何在C++中实现迭代器模式,包括抽象迭代器、聚合类和具体实现。迭代器模式在C++标准库中广泛应用,使得遍历容器变得简单易行。

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

迭代器模式

提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。

#include<iostream>
#include<string>
#include<vector>
using namespace std;

class Iterator {
public:
	virtual string first() = 0;
	virtual string next() = 0;
	virtual bool isDone() const = 0;
	virtual string current() = 0;

	virtual ~Iterator() {}
};
class Aggregate {//聚合类
public:
	virtual void push(const string& s) = 0;
	virtual string pop(int index) = 0;
	virtual int Count() const = 0;
	virtual Iterator* createIterator() = 0;
	
	virtual ~Aggregate() {}
};

class ConcreteIterator :public Iterator {
private:
	Aggregate* aggregate;
	int index;
public:
	ConcreteIterator(Aggregate* aggregate) :aggregate(aggregate),index(0) {}

	string first() override {
		if (aggregate->Count() == 0)
			return string();
		return aggregate->pop(0);
	}
	string next() override {
		if (++index >= aggregate->Count())
			return string();
		return aggregate->pop(index);
	}
	string current() override {
		if (index >= aggregate->Count()) {
			return string();
		}
		return aggregate->pop(index);
	}
	bool isDone() const override {
		return index < 0 || index >= aggregate->Count();
	}
};

class ConcreteAggregate :public Aggregate {
private:
	vector<string> strs;
public:
	void push(const string& s) override {
		return strs.emplace_back(s);
	}
	string pop(int index) override {
		if (index >= strs.size())
			return string();
		return strs.at(index);
	}
	int Count() const override {
		return strs.size();
	}
	Iterator* createIterator() {//创建相应迭代器
		//多态迭代器(此处依赖于具体类的实现,为了代码的稳定性,可以结合工厂模式)
		return new ConcreteIterator(this);
	}
};


int main()
{
	Aggregate* aggregate = new ConcreteAggregate();
	aggregate->push("hello");
	aggregate->push("world");

	Iterator* iter = aggregate->createIterator();
	cout << iter->first() << endl;
	while (!iter->isDone())
	{
		cout << iter->next();
	}
	delete aggregate, iter;
	return 0;
}

结果如下:
在这里插入图片描述

迭代器中,主要涉及迭代器抽象类和聚合抽象类(定义创建相应迭代器对象的接口)。具体聚合类中实现创建相应迭代器的接口。在C++标准库中,已经实现了迭代器,可直接使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dailingGuo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值