迭代器的總結

2021-10-01 23:56:06 字數 2233 閱讀 8112

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

jquery中的迭代器 (先index,後value)

var obj =

;var arr =[1

,2,3

,5];

$.each

(obj,

function

(index, value));

$.each

(arr,

function

(index, value)

);

underscore中的迭代器
var obj =

;var arr =[1

,2,3

,5];

_.each

(obj,

function

(value, index));

_.each

(arr,

function

(value, index)

);

es5中的迭代器(foreach只能遍歷陣列,不能遍歷物件)
// 遍歷陣列

var arr =[1

,2,3

,5];

arr.

foreach

(function

(value, index, arr)

);

for in 遍歷(可以是物件,可以是陣列。但是不應該用於遍歷陣列,下面會講到為什麼不應該用於遍歷陣列)
var obj =

;var arr =[1

,2,3

,5];

for(

var i in obj)

for(

var i in arr)

for 只能遍歷陣列(不能遍歷物件)
var arr =[1

,2,3

,5];

for(

var i =

0; i < arr.length; i++

)

封裝乙個遍歷的函式(也就是相當於實現了foreach)
object.prototype.

myeach

=function

(fn)

}else

}// for(var i in this)

}// this 也被遍歷了

object.

defineproperty

(object.prototype,

'myeach',)

// 遍歷陣列

var arr =[1

,2,3

,5];

arr.

myeach

(function

(value, index, arr));

var obj =

;obj.

myeach

(function

(value, index, obj)

);

for in 能實現物件和陣列的遍歷,因為不建議使用for in遍歷陣列,所以是物件的話,使用for in。是陣列的話,使用for遍歷。

for of可以遍歷陣列,但是不能使用索引值

​ 我們可以在外部定義索引值,在內部修改索引值即可使用

for in可以遍歷陣列,索引值是字串

官方文件是這樣解釋的:for...in不應該用於迭代乙個array,其中索引順序很重要。

陣列索引只是具有整數名稱的列舉屬性,並且與通用物件屬性相同。不能保證for ... in將以任何特定的順序返回索引。for ... in迴圈語句將返回所有可列舉屬性,包括非整數型別的名稱和繼承的那些。

因為迭代的順序是依賴於執行環境的,所以陣列遍歷不一定按次序訪問元素。因此當迭代訪問順序很重要的陣列時,最好用整數索引去進行for迴圈(或者使用array.prototype.foreach()for...of迴圈)。

迭代器python Python 迭代器總結

迭代器是python乙個強大的功能,它可以記錄被迭代 物件 的位置,迭代器物件從集合的第乙個元素開始訪問資料,直到所有資料訪問結束,迭代器有兩個基本函式iter 和next iter 用來生成迭代器 next 用來返回迭代器的下乙個資料 python內建模組itertools,提供了很多非常有用的函...

STL總結 迭代器

所有容器都定義了各自的迭代器 迭代器是乙個物件,它的工作是在容器中挑選元素,並將其呈現給迭代器使用者。迭代器分類 input迭代器 向前讀取 istream output迭代器 向前寫入 ostream forward迭代器 向前讀取和寫入 bidirectional迭代器 向前和向後讀取和寫入 l...

迭代器模式總結

1 問題 在物件導向的軟體設計中,經常會遇到一些聚集物件,按一定的順序的遍歷訪問問題,這個遍歷演算法究竟應該由誰來實現呢,聚集物件本身?這樣聚集物件承受了過多的功能,不僅要維護聚集物件內的元素,還要提供遍歷自身的介面,而且由於遍歷狀態儲存的問題,不能對同乙個容器物件同時進行多個遍歷,這不符合單一職責...