C 中的迭代器模式

2021-10-09 14:59:44 字數 3316 閱讀 4448

/// 

/// 聚合介面

///

public

inte***ce

ilistcollection

///

/// 迭代器介面

///

public

inte***ce

iterator

///

/// 具體聚合類

///

public

class

persons

:ilistcollection

public

void

add(

intvalue

)public

iterator

getiterator()

}///

/// 具體迭代器類

///

public

class

personiterator

:iterator

int iterator.

getcurrent()

bool iterator.

movenext()

index++

;return

true;}

void iterator.

reset()

}

實現迭代器模式有以下幾個要點:

1.聚合介面和迭代器介面。

2.具體聚合類,定義資料的儲存容器,新增元素的方法等,還有獲取具體迭代器的方法。

3.具體迭代器類,定義迭代內部實現的一些具體細節等。

客戶端呼叫:

static

void

main

(string

args)

iterator temp = persons.

getiterator()

;while

(temp.

movenext()

) console.

read()

;}

結果:

// 摘要:

// 公開列舉數,該列舉數支援在非泛型集合上進行簡單迭代。

public

inte***ce

ienumerable

//// 摘要:

// 支援對非泛型集合的簡單迭代。

public

inte***ce

ienumerator

//// 摘要:

// 將列舉數推進到集合的下乙個元素。

//// 返回結果:

// 如果列舉數成功地推進到下乙個元素,則為 true;如果列舉數越過集合的結尾,則為 false。

//// 異常:

// t:system.invalidoperationexception:

// 在建立了列舉數後集合被修改了。

bool

movenext()

;//// 摘要:

// 將列舉數設定為其初始位置,該位置位於集合中第乙個元素之前。

//// 異常:

// t:system.invalidoperationexception:

// 在建立了列舉數後集合被修改了。

void

reset()

;}這是c#中標準的迭代器模式相關的介面,c#中可迭代的容器都實現了該介面,並且可以直接通過foreach進行迭代輸出。

下面,展示乙個比較簡單的棧的部分源**

class

stack

:ienumerable

//具體的聚合類,實現ienumerable介面

public

virtual

ienumerator

getenumerator()

//實現ienumerable的介面

public

virtual

object

peek()

return _array[_size -1]

;}public

virtual

object

pop(

) _version++

;object result = _array[

--_size]

; _array[_size]

=null

;return result;

}public

virtual

void

push

(object obj)

_array[_size++

]= obj;

_version++;}

[serializable

]private

class

stackenumerator

:ienumerator

//具體的迭代器類,實現迭代器介面

if(_index ==-1

)return currentelement;}}

internal

stackenumerator

(stack stack)

public

virtual

bool

movenext()

bool flag;

if(_index ==-2

)return flag;}if

(_index ==-1

) flag =

(--_index >=0)

;if(flag)

else

return flag;

}public

virtual

void

reset()

_index =-2

; currentelement =

null;}

}

在stack的源**中,stack實現了ienumerable介面的getenumerator()方法,用於返回乙個ienumerator型別的迭代器。而在stack中宣告了乙個stackenumerator 的具體迭代器類,實現ienumerator介面,並且針對stack的資料結構,實現了ienumerator介面的各種方法。

c 迭代器模式

不能直接std 的迭代器代替麼。iterator 定義迭代器訪問和遍歷元素的介面 concreteiterator 實現具體的迭代器 aggregate 定義的容器,建立相應迭代器物件的介面 concreteaggregate 具體的容器實現建立相應迭代器的介面,該操作返回concreteitera...

C 設計模式 迭代器模式

迭代器模式 iterator 提供一種方法順序訪問乙個聚合物件中各個元素,而又不暴露該物件的內部表示。迭代器模式結構圖 iterator迭代器抽象類 class iterator public virtual object first 0 virtual object next 0 virtual ...

C 設計模式 迭代器模式

迭代器模式 提供一種方法順序訪問乙個聚合物件中的各個元素,而又不暴露其內部的結構 每一種資料結構 包括自定義 遍歷自身內部的資料方式都是不同的。但是我們又希望和常規的遍歷方式一樣呼叫,就如for和foreach一樣遍歷。想要以相同的方式遍歷不同型別的聚合物件,首先就要有乙個相同的介面方法來統一獲取,...