Iterator 迭代器模式

2021-08-15 07:50:08 字數 1359 閱讀 4936

現在有乙個集合。其內部元素的儲存方式可能比較複雜。為了讓使用者在不用關心其內部表示的情況下對其元素進行訪問,於是建立了乙個迭代器用於對集合的各個元素進行訪問。為了給使用者提供乙個更友好且強大的介面類,於是對迭代器以組合的形式進行封裝,得到乙個管理類。使用者直接操作該管理類即可得到指定元素,或通過管理類直接得到迭代器,通過迭代器訪問具體元素。這就是迭代器模式。

stl中使用了迭代器。以vector為例。為了便於訪問元素,定義了迭代器iterator。將iterator以組合的形式封裝成乙個管理類,即vector。使用者使用時,使用的是管理類vector。使用者可以通過管理類vector直接訪問集合元素,或者通過vector來獲取迭代器iterator,通過iterator來訪問集合元素。

1.    定義迭代器iterator基類及管理類基類aggregate

兩個基類分別規定了迭代器類與管理類的標準介面。

//迭代器基類iterator

templateclass iterator

;//管理類基類aggregate

templateclass aggregate

;

2.    定義迭代器類派生類及管理類派生類

實現兩個基類所定義的標準介面。

//迭代器派生類concreteiterator

templateclass concreteiterator : public iterator

virtual void first()

virtual void next()

virtual item* currentitem()

virtual bool isdone()

protected:

concreteaggregate* _aggr;

int _cur;

};//管理類派生類concreteaggregate

templateclass concreteaggregate :public aggregate

virtual iterator* createiterator()

item& operator(int index)

int getlen()

protected:

vector_data;

};

3.    使用者使用

使用者使用時,將管理類的派生類指標賦給管理類基類指標。由於介面都是標準的,故使用者直接使用該基類即可。

同理,使用者可使用管理類的介面建立乙個迭代器指標,然後將該指標賦值給迭代器基類指標,然後使用者直接使用迭代器基類即可。

void main()

}

迭代器模式(Iterator)

迭代器模式 iterator 提供一種方法順序訪問乙個聚合物件中的各種元素,而又不暴露該物件的內部表示。當你需要訪問乙個聚合物件,而且不管這些物件是什麼都需要遍歷的時候,就應該考慮使用迭代器模式。另外,當需要對聚集有多種方式遍歷時,可以考慮去使用迭代器模式。迭代器模式為遍歷不同的聚集結構提供如開始 ...

迭代器模式(Iterator)

1.目的 當需要遍歷 單種方式或多種方式 遍歷乙個組合物件時,使用遍歷模式。該模式類似與將容器的介面進行封裝,不對外直接暴露容器的介面的做法類似。2.ifndef iterator h define iterator h include include using namespace std cla...

迭代器模式 Iterator

提供一種方法順序訪問乙個聚合物件中各個元素 而又不需暴露該物件的內部表示。針對不同的需要,可能要以不同的方式遍歷這個列表。但是即使可以預見到所需的那些遍歷操作,你可能也不希望列表的介面中充斥著各種不同遍歷的操作。有時還可能需要在同乙個表列上同時進行多個遍歷。迭代器模式可用來 訪問乙個聚合物件的內容而...