大家好,又见面了,我是全栈君。
,提供一种方法顺序訪问一个聚合对象中各个元素,而又不暴露该对象的内部表示。
- 当你须要訪问一个聚集对象。并且无论这些对象是什么都要遍历一遍的时候,你就应该考虑使用迭代器模式。
- 当你须要对聚集对象有多种遍历时。能够考虑使用迭代器模式。
#include "stdafx.h" #include <iostream> #include <vector> using namespace std; template<typename T > class Iterator { public: virtual ~Iterator(){}; virtual void First() = 0; virtual void Next() = 0; virtual bool IsDone() const = 0; virtual T* CurrentItem() = 0; }; template<typename T > class ConcreteAggregate ; template<typename T > class Aggregate { public: virtual ~Aggregate() {}; virtual Iterator< T>* CreateIterator() = 0; }; template<typename T > class ConcreteIterator :public Iterator <T > { private: ConcreteAggregate<T >* m_pAggre; int current = 0; public: virtual ~ConcreteIterator() { delete m_pAggre; } ConcreteIterator( ConcreteAggregate<T >* pAggre ) :m_pAggre(pAggre), current(0) {} virtual void First() { current = 0; } virtual void Next() { if (current < m_pAggre->GetLen()) ++current; } virtual bool IsDone() const { return (current >= m_pAggre->GetLen()); } virtual T* CurrentItem() { if (current <= m_pAggre->GetLen()) return &(*m_pAggre)[current]; else return NULL; } }; template<typename T > class ConcreteAggregate :public Aggregate <T > { private: vector< T> m_Data; public: ConcreteAggregate() { m_Data.push_back(1); m_Data.push_back(2); m_Data.push_back(3); } virtual Iterator< T>* CreateIterator() { return new ConcreteIterator<T >(this ); } T& operator[]( int index) { return m_Data[ index]; } int GetLen() { return m_Data.size(); } };
// IteratorPattern.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include "Iterator.h" #include <iostream> int _tmain (int argc , _TCHAR * argv []) { Aggregate< int>* pAgg = new ConcreteAggregate<int >(); Iterator< int>* it = pAgg->CreateIterator(); for (it->First(); !it->IsDone(); it->Next()) { std::cout <<*( it->CurrentItem() )<< std::endl; } getchar(); return 0; }
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/115630.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...