博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Design Pattern --- Iterator
阅读量:5128 次
发布时间:2019-06-13

本文共 1511 字,大约阅读时间需要 5 分钟。

template 
class Iterator{public: // Interface virtual void First() = 0; virtual void Next() = 0; virtual bool IsDone() const = 0; virtual T CurrentItem() const = 0;};template
class DequeIterator : public Iterator
{ // data. const deque
&m_deque; unsigned m_curPos;public: DequeIterator(const deque
&d) : m_deque(d), m_curPos(0) {}public: // Interface virtual void First() override { m_curPos = 0; } virtual void Next() override { ++m_curPos; } virtual bool IsDone() const override { return m_curPos == m_deque.size(); } virtual T CurrentItem() const override { return m_deque[m_curPos]; }};template
class DequeReverseIterator : public Iterator
{ // data. const deque
&m_deque; unsigned m_curPos;public: DequeReverseIterator(const deque
&d) : m_deque(d), m_curPos(d.size()-1) {}public: // Interface virtual void First() override { m_curPos = m_deque.size()-1; } virtual void Next() override { --m_curPos; } virtual bool IsDone() const override { return m_curPos == -1; } // Magic and ugly. virtual T CurrentItem() const override { return m_deque[m_curPos]; }};int main(){ deque
d; for (int i = 0; i < 10; ++i) { d.push_back(i); } // Forward iterator. for (DequeIterator
i(d); !i.IsDone(); i.Next()) { cout <
<
i(d); !i.IsDone(); i.Next()) { cout <
<

迭代器最大的优点在于将遍历的方法封装到单独的类中, 即 Iterator 类.

纵观设计模式, 还是强调把易变性封装到单独的类中.

转载于:https://www.cnblogs.com/walfud/articles/2893274.html

你可能感兴趣的文章
使用pygal_maps_world.i18n中数据画各大洲地图
查看>>
sql server必知多种日期函数时间格式转换
查看>>
jQuery EasyUI 的下拉选择combobox后台动态赋值
查看>>
timeline时间轴进度“群英荟萃”
查看>>
python if else elif statement
查看>>
网络编程
查看>>
文本隐藏(图片代替文字)
查看>>
java面试题
查看>>
提高码力专题(未完待续)
查看>>
pair的例子
查看>>
前端框架性能对比
查看>>
uva 387 A Puzzling Problem (回溯)
查看>>
12.2日常
查看>>
同步代码时忽略maven项目 target目录
查看>>
Oracle中包的创建
查看>>
团队开发之个人博客八(4月27)
查看>>
发布功能完成
查看>>
【原】小程序常见问题整理
查看>>
C# ITextSharp pdf 自动打印
查看>>
【Java】synchronized与lock的区别
查看>>