設計模式(16) 迭代器 Iterator

2021-08-10 08:34:47 字數 3416 閱讀 6048

目錄:

設計模式學習筆記首頁

設計模式(1)——抽象工廠 abstractfactory

設計模式(2)——生成器 builder

設計模式(3)——工廠方法 factory method

設計模式(4)——原型 prototype

設計模式(5)——單例 singleton

設計模式(6)——介面卡 adapter

設計模式(7)——橋接 bridge

設計模式(8)——組合 composite

設計模式(9)——裝飾 decorator

設計模式(10)——外觀 facade

設計模式(11)——享元 flyweight

設計模式(12)——** proxy

設計模式(13)——職責鏈 chain of responsibility

設計模式(14)——命令 command

設計模式(15)——直譯器 interpreter

設計模式(16)——迭代器 iterator

設計模式(17)——中介者 mediator

設計模式(18)——備忘錄 memento

設計模式(19)——觀察者 observer

設計模式(20)——狀態 state

設計模式(21)——策略 strategy

設計模式(22)——模板方法 template method

設計模式(23)——訪問者 visitor

提供一種方法順序訪問乙個聚合物件中各個元素,而又不需要暴露該物件的內部表示。

訪問乙個聚合物件的內容而無需暴露它的內部表示

支援對聚合物件的多種遍歷

為遍歷不同的聚合結構提供乙個統一的介面(即,支援多型迭代)

stl 模板庫的中常見的容器類有list,set,map等,使用容器類經常需要遍歷裡面的所有元素,當對容器類中元素的組織方式不清楚時,要遍歷元素不是一件容易的事情。迭代器就是解決這個問題的救星,它提供了一套統一的介面,如begin(),next(),end(),所有的遍歷都可以用這套介面來實現。這套介面具體由每個容器類來實現,容器內部才是最清楚怎麼遍歷自己元素的地方。正向遍歷,反向遍歷,中序遍歷的需求可以通過由容器內部建立不同的iterator來實現,而iterator暴露的介面是一樣的。

通過引入 iterator 迭代器這個中間層,系統可以不需要直接操作容器的所有細節,只需要知道 iterator 的標準介面就能操作容器的所有元素。iterator 將系統和容器的細節解耦了,程式猿的生活也變得更加美好了。

1. 編寫聚合類介面aggreagte,聚合類concreteaggregate

2. 編寫迭代器介面iterator,迭代器類concreteiterator,含有方法first()next()currentitem()isdone()

3. 編寫迭代器建構函式concreteiterator(aggregate* ag, int idx = 0),強關聯乙個聚合類物件。

iterator.h

#pragma once

typedef int object;

class aggregate;

class iterator ;

class concreteiterator : public iterator ;

iterator.cpp
#include "iterator.h"

#include "aggregate.h"

#include

using

namespace::std;

iterator::iterator() {}

iterator::~iterator() {}

concreteiterator::concreteiterator(aggregate* ag, int idx)

concreteiterator::~concreteiterator() {}

object concreteiterator::currentitem()

// 初始化迭代器

void concreteiterator::first()

void concreteiterator::next()

bool concreteiterator::isdone()

agrregate.h
#pragma once

class iterator;

typedef int object;

class aggregate ;

class concreteaggregate : public aggregate ;

concreteaggregate();

~concreteaggregate();

iterator* createiterator();

object getitem(int idx);

int getsize();

protected:

private:

object _objs[size];

};

aggregate.cpp
#include "aggregate.h"

#include "iterator.h"

#include

using

namespace::std;

aggregate::aggregate() {}

aggregate::~aggregate(){}

concreteaggregate::concreteaggregate()

}concreteaggregate::~concreteaggregate() {}

iterator* concreteaggregate::createiterator()

object concreteaggregate::getitem(int idx)

else

}int concreteaggregate::getsize()

main.cpp
#pragma once

#include "aggregate.h"

#include "iterator.h"

#include

using

namespace::std;

int main(int argc, char* argv)

return

0;}

23種設計模式 16 迭代器模式

迭代器介面 public inte ce iterator 資料容器介面 public inte ce idatacontainer 資料物件 public class data idatacontainer 集合長度 public int length 根據索引獲取值 public int get...

python高階特性5 迭代器 Iterator

python五個高階特性 切片 迭代列表生成式 生成器迭代器 我們已經知道,可以直接作用於for迴圈的資料型別有以下幾種 一類是集合資料型別,如list tuple dict set str等 一類是generator,包括生成器和帶yield的generator function。這些可以直接作用...

設計模式 迭代器模式

迭代器模式是屬於物件行為性的模式。首先是定義 提供一種方法順序訪問乙個聚合物件中各個元素,而又不暴露物件的表示方法。迭代器的結構圖 適用性 1 訪問乙個聚合物件的內容而無需暴露它的內部表示 2 支援聚合物件的多種遍歷 3 為遍歷不同的聚合結構提供乙個統一的介面 支援多型迭代 協作 concretei...