叠代器
叠代器(iterator)是壹種對象,它能夠用來遍歷標準模板庫容器中的部分或全部元素,每個叠代器對象代表容器中的確定的地址。叠代器修改了常規指針的接口,所謂叠代器是壹種概念上的抽象:那些行為上像叠代器的東西都可以叫做叠代器。然而叠代器有很多不同的能力,它可以把抽象容器和通用算法有機的統壹起來。
叠代器提供壹些基本操作符:*、++、==、!=、=。這些操作和C/C++“操作array元素”時的指針接口壹致。不同之處在於,叠代器是個所謂的復雜的指針,具有遍歷復雜數據結構的能力。其下層運行機制取決於其所遍歷的數據結構。因此,每壹種容器型別都必須提供自己的叠代器。事實上每壹種容器都將其叠代器以嵌套的方式定義於內部。因此各種叠代器的接口相同,型號卻不同。這直接導出了泛型程序設計的概念:所有操作行為都使用相同接口,雖然它們的型別不同。
叠代器使開發人員能夠在類或結構中支持foreach叠代,而不必整個實現IEnumerable或者IEnumerator接口。只需提供壹個叠代器,即可遍歷類中的數據結構。當編譯器檢測到叠代器時,將自動生成IEnumerable接口或者IEnumerator接口的Current,MoveNext和Dispose方法。
生成器
生成器是壹次生成壹個值的特殊類型函數。可以將其視為可恢復函數。調用該函數將返回壹個可用於生成連續 x 值的生成器Generator
簡單的說就是在函數的執行過程中,yield語句會把妳需要的值返回給調用生成器的地方,然後退出函數,下壹次調用生成器函數的時候又從上次中斷的地方開始執行,而生成器內的所有變量參數都會被保存下來供下壹次使用。