迭代器模式,提供一種方法順序訪問乙個聚合物件中各個元素,而不暴露該物件的內部表示。該模式很好理解,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...