設計模式之迭代器模式(C )

2021-08-29 23:39:56 字數 4152 閱讀 4853

迭代器模式,提供一種方法順序訪問乙個聚合物件中各個元素,而不暴露該物件的內部表示。該模式很好理解,c++中的迭代器應該都用過,和那個差不多。其uml圖如下:

concreteiterator內部有乙個聚合物件的引用(指標),而concreteaggregate依賴於concreteiterator。以前向鍊錶為例,示例**如下:

// iteratormodel.h檔案

#pragma once

#include

// 單向鍊錶

template

<

typename t>

class

node

t data;

node * next;};

// 迭代器

template

<

typename t>

class

iteratorbase

;template

<

typename t>

class

iterator

;// 單項鍊表

template

<

typename t>

class

forwardlist

;// 具體的迭代器

template

<

typename t>

class

iterator

:public iteratorbase

t first()

t next()

t currentitem()

bool

isdone()

t operator*(

)};// forwardlist函式實現

// 建立迭代器函式

template

<

typename t>

iterator forwardlist

::createiterator()

template

<

typename t>

forwardlist

::forwardlist()

:m_nlength(0u

),m_headnode

(nullptr

)template

<

typename t>

forwardlist::~

forwardlist()

template

<

typename t>

node

* forwardlist

::getnode

(unsigned

int index)

unsigned

int n =0;

node

* pnode = m_headnode;

while

(n++

<= index)

return pnode;

}template

<

typename t>

t forwardlist

::getelement

(unsigned

int index)

template

<

typename t>

t forwardlist

::getfirst()

template

<

typename t>

t forwardlist

::gettail()

return

getelement

(m_nlength -1)

;}template

<

typename t>

unsigned

int forwardlist

::insertelement

(unsigned

int index, t elem)

node

* pnode = m_headnode;

unsigned

int n =0u;

while

(n++

< index)

// 定位到index上乙個節點

// 插入節點

node

*pnodeelem =

new node

; pnodeelem-

>data = elem;

pnodeelem-

>next = pnode-

>next;

pnode-

>next = pnodeelem;

// 長度增加

m_nlength++

;return index;

}template

<

typename t>

unsigned

int forwardlist

::insertfirst

(t elem)

template

<

typename t>

unsigned

int forwardlist

::(t elem)

template

<

typename t>

unsigned

intsetvalue

(unsigned

int index, t value)

node

* pnode = m_headnode;

while

(n++

<= index)

// 定位到index

pnode-

>data = value;

return index;

}template

<

typename t>

t forwardlist

::deleteelement

(unsigned

int index)

unsigned

int n =0u;

node

* pnode = m_headnode;

while

(n++

< index)

// 定位到index上乙個節點

// 刪除節點

node

* pnodetemp = pnode-

>next;

pnode-

>next = pnodetemp-

>next;

t ttemp = pnodetemp-

>data;

delete pnodetemp;

pnodetemp =

nullptr

;// 長度減一

m_nlength--

;return ttemp;

}template

<

typename t>

void forwardlist

::deleteall()

m_headnode-

>next =

nullptr;}

template

<

typename t>

unsigned

int forwardlist

::getlength()

template

<

typename t>

bool forwardlist

::empty()

template

<

typename t>

node

* forwardlist

::getfirstnode()

測試**如下:

#include

#include

"iteratormodel.h"

intmain()

測試結果如下圖:

c 設計模式之迭代器模式

迭代器模式iterator pattern 定義 迭代器模式 iterator 提供一種方法順序訪問乙個聚合物件中的各種元素,而又不暴露該物件的內部表示。適用場景 1 訪問乙個聚合物件的內容而無需暴露它的內部表示,2 支援對聚合物件的多種遍歷,3 為遍歷不同的聚合結構提供乙個統一的介面。迭代器模式的...

設計模式之迭代器模式

概念 提供一種方法順序訪問乙個聚合物件中各個元素,而又不需暴露該物件的內部表示。main 客戶 iproject,產品介面 cproject,產品類 iiterator,迭代器介面 iprojectiterator,產品迭代器介面 cprojectiterator,產品迭代器實現類 說明 cproj...

設計模式之迭代器模式

當你需要訪問乙個聚集物件,而且不管這些物件是什麼都需要遍歷的時候,而且可能對聚集有多種方式遍歷時,需要為遍歷不同的聚集結構提供如開始,下乙個,是否結束,當前哪一項等 統一介面,你就應該考慮用迭代器模式.提供一種方法順序訪問乙個聚合物件中各個元素,而又不暴露該物件的內部表示.uml設計圖 部分 ite...