您的位置:首页 > 其它

Iterator 迭代器模式 笔记

2013-06-05 14:42 78 查看
  


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

为遍历不同的聚集结构提供如开始,下一个,是否结束,当前一项等统一接口。

#include <iostream>

using namespace std;

class IntStack

{

public:

IntStack() { m_nTop = 0; }

virtual ~IntStack() {}

void Push(int);

int Pop();

friend class IntStackIterator;

private:

enum { SIZE = 100 };

int m_nStack[SIZE];

int m_nTop;

};

void IntStack::Push(int nData)

{

if(m_nTop < SIZE)

{

m_nStack[m_nTop++] = nData;

}

else

{

cerr << "超出容量范围。" << endl;

}

}

int IntStack::Pop()

{

if(m_nTop > 0)

{

return m_nStack[--m_nTop];

}

return 0;

}

class Iterator

{

public:

Iterator() {}

virtual ~Iterator() {}

virtual int operator++() = 0;

virtual int operator++(int) = 0;

};

class IntStackIterator : public Iterator

{

public:

IntStackIterator(IntStack*);

virtual ~IntStackIterator();

int operator++();

int operator++(int);

private:

IntStack* m_pStack;

int m_nIndex;

};

IntStackIterator::IntStackIterator(IntStack* pStack)

{

m_pStack = pStack;

m_nIndex = 0;

}

IntStackIterator::~IntStackIterator()

{

if(m_pStack != NULL)

{

delete m_pStack;

m_pStack = NULL;

}

}

int IntStackIterator::operator++()

{

if(m_nIndex < m_pStack->m_nTop)

{

return m_pStack->m_nStack[++m_nIndex];

}

return 0;

}

int IntStackIterator::operator++(int)

{

if(m_nIndex < m_pStack->m_nTop)

{

return m_pStack->m_nStack[m_nIndex++];

}

return 0;

}

int main(int argc, char* argv[])

{

IntStack* pStack = new IntStack;

for(int i = 0; i < 5; ++i)

{

pStack->Push(i);

}

Iterator* pIt = new IntStackIterator(pStack);

for(int i = 0; i < 5; ++i)

{

cout << (*pIt)++ << endl;

}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: