疊代器

疊代器

疊代器(iterator)有時又稱游標(cursor)是程式設計的軟體設計模式,可在容器(container,例如鍊表或陣列)上遍訪的接口,設計人員無需關心容器的內容。

解釋

疊代器( iterator)是一種對象,它能夠用來遍歷標準模板庫容器中的部分或全部元素,每個疊代器對象代表容器中的確定的地址。疊代器修改了常規指針的接口,所謂疊代器是一種概念上的抽象:那些行為上像疊代器的東西都可以叫做疊代器。然而疊代器有很多不同的能力,它可以把抽象容器和通用算法有機的統一起來。

疊代器提供一些基本操作符:*、++、==、!=、=。這些操作和C/C++“操作array元素”時的指針接口一致。不同之處在於,疊代器是個所謂的 複雜的指針,具有遍歷複雜數據結構的能力。其下層運行機製取決於其所遍歷的數據結構。因此,每一種容器型都必須提供自己的疊代器。事實上每一種容器都將其疊代器以嵌套的方式定義於內部。因此各種疊代器的接口相同,型號卻不同。這直接導出了泛型程式設計的概念:所有操作行為都使用相同接口,雖然它們的型別不同。

功能

疊代器使開發人員能夠在類或結構中支持foreach疊代,而不必整個實現IEnumerable或者IEnumerator接口。只需提供一個疊代器,即可遍歷類中的數據結構。當編譯器檢測到疊代器時,將自動生成IEnumerable接口或者IEnumerator接口的Current,MoveNext和Dispose方法。

特點

1.疊代器是可以返回相同類型值的有序序列的一段代碼;

2.疊代器可用作方法、運算符或get訪問器的代碼體;

3.疊代器代碼使用yieldreturn語句依次返回每個元素,yield break將終止疊代;

4.可以在類中實現多個疊代器,每個疊代器都必須像任何類成員一樣有惟一的名稱,並且可以在foreach語句中被客戶端,代碼調用如下所示:foreach(int x in SimpleClass.Iterator2){};

5.疊代器的返回類型必須為IEnumerable和IEnumerator中的任意一種;

6.疊代器是產生值的有序序列的一個語句塊,不同於有一個 或多個yield語句存在的常規語句塊;

7.疊代器不是一種成員,它只是實現函式成員的方式,理解這一點是很重要的,一個通過疊代器實現的成員,可以被其他可能或不可能通過疊代器實現的成員覆蓋和重載;

8.疊代器塊在C#語法中不是獨特的元素,它們在幾個方面受到限制,並且主要作用在函式成員聲明的語義上,它們在語法上只是語句塊而已;

9.yield關鍵字用於指定返回的值。到達 yieldreturn語句時,會保存當前位置。下次調用疊代器時將從此位置重新開始執行。 疊代器對集合類特別有用,它提供一種簡單的方法來疊代不常用的數據結構(如二進制樹)。

簡介

疊代器是一種檢查容器內元素並遍曆元素的可帶泛型數據類型。

一個簡單例子

疊代器模式。Iterator對已集合類中的任何一個實現類,都可以返回這樣一個Iterator對象。就和循環一樣,好處是可以適用於任何一個類,而且實際上java對它進行了最佳化,比直接用index訪問快一點(這一點沒法考證,別人都這樣說)。不過呢,有一點很好,就是用起來確實很好用,加上泛型就更好用啦。比如說這樣一個例子ArrayList< String > arr = new ArrayList< String >();Iterator it = arr.iterator();疊代的時候可以這樣while( it .hasNext() ){ //做一些處理,比如 System.out.print( it.next );}配合上泛型,一個好處是it.next()可以不用類型轉換。以前用的時候是Object,還要自己轉,我感覺,Iterator和泛型簡直就是絕配哈。

相關詞條

相關搜尋

熱門詞條

聯絡我們