迭代器模式----C++实现

迭代器模式

定义:

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

适用性:

1、  访问一个聚合对象的内容而无需暴露它的内部表示。

2、  支持聚合对象的多种遍历

3、  为遍历不同的聚合结构提供一个统一的接口。

 

迭代器的作用:

1、  支持以不同的方式遍历一个聚合。

2、  迭代器简化了聚合的接口

3、  在同一个聚合上可以有多个遍历。

 

结构:

迭代器模式----C++实现

实现:

 

template<class Item>

class Iterator

{

public:

       virtual void First() = 0;

       virtual void Next() = 0;

       virtual bool isDone() = 0;

       virtualItem CurrentItem() = 0;

};

 

template<class Item>

class Agrregate

{

public:

    virtualIterator<Item>* CreateIterator() = 0;

       virtual~Agrregate() {}

};

 

template<class Item>

class ConcreteIterator;

 

template<class Item>

class ConcreteAgrregate:public Agrregate<Item>

{

public:

       ConcreteAgrregate(){}

       ~ConcreteAgrregate(){}

       Iterator<Item>* CreateIterator()

       {

              returnnew ConcreteIterator<Item>(this);

       }

       voidAddItem(Item val)

       {

              m_itemVec.push_back(val);

       }

 

       int  Size()

       {

              returnm_itemVec.size();

       }

 

       voidRemoveItem(Item val)

       {

              vector<Item>::iterator it =find(m_itemVec.begin(),m_itemVec.end(),val);

              if(it != m_itemVec.end())

              {

                     m_itemVec.erase(it);

              }

       }

       Item& operator[](int index) 

       { 

              returnm_itemVec[index]; 

       } 

private:

       vector<Item>  m_itemVec;

};

 

template<class Item>

class ConcreteIterator:public Iterator<Item>

{

public:

       ConcreteIterator(ConcreteAgrregate<Item>*pAggregate):m_Aggregate(*pAggregate),m_curIndex(0)

       {   }

        void First()

        {

               m_curIndex = 0;

        }

        void Next()

        {

               if (m_curIndex< m_Aggregate.Size() - 1)

               {

                      ++m_curIndex;

               }

        }

        bool isDone()

        {

               if (m_curIndex== m_Aggregate.Size() - 1)

               {

                      return true;

               }

               return false;

        }

        Item CurrentItem()

        {

               if (m_curIndex< m_Aggregate.Size())

               {

                       returnm_Aggregate[m_curIndex];

               }

        }

private:

       long  m_curIndex;

       ConcreteAgrregate<Item>  m_Aggregate;

};

 

       ConcreteAgrregate<int>  *pa = new ConcreteAgrregate<int>();

       pa->AddItem(5);

       pa->AddItem(15);

       pa->AddItem(54);

       pa->AddItem(65);

       pa->AddItem(57);

       pa->AddItem(59);

       pa->AddItem(50);

       cout<<"pasize :"<<pa->Size()<<endl;

       Iterator<int>*pit = pa->CreateIterator();

       for(pit->First(); !pit->isDone(); pit->Next() )

       {

              cout<<pit->CurrentItem()<<"      ";

       }

       cout<<endl;

 迭代器模式----C++实现

迭代器模式----C++实现

上一篇:Windows下安装PyQt5完整教程


下一篇:C++ 指针 new delete