- 迭代抽象:访问一个聚合对象的内容而无需暴露它的内部实现
- 迭代多态:为遍历不同的集合结构提供一个统一的接口,从而支持同样的算法在不同的集合结构上进行操作
- 迭代器的健壮性考虑:遍历的同时更改迭代器所在的集合结构,会导致问题
在软件构建过程中,集合对象内部结构常常变化各异,但对于这些集合对象,我们希望在不暴露其内部结构的同时,可以让外部客户代码透明的访问其中包含的元素;同时这种“透明遍历”也为“同一种算法在多种集合对象上进行操作”提供了可能。
提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露(稳定)该对象的内部表示。
template<typename T>
class Iterator{
public:
virtual void first() = 0;
virtual void next() = 0;
virtual void isDone() = 0;
virtual T& current() = 0;
};
template<typename T>
class MyCollection{
public:
Iterator<T> GetIterator(){
//...
}
};
template<typename T>
class CollectionIterator : public Iterator<T>{
MyCollection<T> mc;
public:
CollectionIterator(const MyCollection<T>& c) : mc(c){}
void first() override{
}
void next() override{
}
void isDone() override{
}
T& current() override{
}
};
void MyAlgorithm(){
MyCollection<int> mc;
Iterator<int> iter = mc.GetIterator();
for(iter.first(); !iter.isDone();iter.enxt()){
cout << iter.current() << endl;
}
}
- 面向对象实现的迭代器,基于虚函数,动态绑定
- C++使用模板实现迭代器(性能较高),静态绑定