迭代器底層實現 C

2021-10-16 04:36:55 字數 1530 閱讀 5108

迭代器(iterator)是一種物件,用來遍歷容器中部分或全部的元素.

拿foreach的內部實現來舉例。foreach可以用來遍歷可列舉型別集合的元素,比如:陣列,list,dictionary等

其實就是用while語句來獲取遍歷集合的 ienumerator介面 來不斷的movenext()(後面會介紹)來實現的.

首先建立個類,繼承兩個介面:ienumerator、ienumerable.

public

class

test

:ienumerator

,ienumerable

public

bool

movenext()

public

void

reset()

}

class

customlist01

:ienumerator

, ienumerable

;}public

object current

}// ienumerable

public

ienumerator

getenumerator()

//ienumerable

public

bool

movenext()

public

void

reset()

}

下面是它的使用:

customlist01 customlist01 =

newcustomlist01()

;ienumerator enumerator = customlist01.

getenumerator()

;if(enumerator.

movenext()

)

執行結果:

因為這裡只進行了一次movenext所以只列印出了這乙個元素,全部列印也很簡單,只需加個while迴圈

while

(enumerator.

movenext()

)

結果:

到這裡,迭代器的標準實現已經完成,其實foreach的底層實現就類似上面寫的while一坨**

可能還會有人想知道泛型的迭代器如何寫,同時迭代器還有簡單協程的寫法,下面就一起帶過吧

class

customlist02

: ienumerable

public

ienumerator

getenumerator()

}}void

main()

}

C 迭代器的實現

using system using system.collections.generic using system.linq using system.text using system.threading.tasks namespace iterator using system using s...

C 高階 繫結器及其底層實現

繫結器繫結器的底層實現 參考文獻 函式物件就是類方法中有operator 運算子過載的。在使用時和函式很類似。在c stl庫中有兩個繫結器 bind1st operator 的第乙個形參變數繫結成乙個確定的值。bind2nd operator 的第二個形參變數繫結成乙個確定的值。大到小排序 在這裡我...

C 迭代器(Foreach)實現方法

一 為非泛型列表建立迭代器塊 using system using system.collections.generic using system.text namespace foreachconstruct region ienumerable 成員 public tokenenumerator...