1. 什麼是迭代器
迭代器是一種對象,它能夠用來遍歷標准模板庫容器中的部分或全部元素,每個迭代器對象代表容器中的確定的地址。迭代器修改了常規指針的介面,所謂迭代器是一種概念上的抽象:那些行為上像迭代器的東西都可以叫做迭代器。然而迭代器有很多不同的能力,它可以把抽象容器和通用演算法有機的統一起來。
迭代器使開發人員能夠在類或結構中支持foreach迭代,而不必整個實現IEnumerable或者IEnumerator介面。只需提供一個迭代器,即可遍歷類中的數據結構。當編譯器檢測到迭代器時,將自動生成IEnumerable介面或者IEnumerator介面的Current,MoveNext和Dispose方法。
(1)php迭代器作用擴展閱讀:
迭代器的特點:
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語句時,會保存當前位置。下次調用迭代器時將從此位置重新開始執行。 迭代器對集合類特別有用,它提供一種簡單的方法來迭代不常用的數據結構(如二進制樹)。
2. 迭代器是什麼
迭代器(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語句時,會保存當前位置。下次調用迭代器時將從此位置重新開始執行。 迭代器對集合類特別有用,它提供一種簡單的方法來迭代不常用的數據結構(如二進制樹)。
3. 迭代器的作用什麼
C++式迭代.
for(std::string::const_iterator it = str.begin(); it != str.end(); ++it)
// ........
上面的it就是迭代器, 就可以理解為以下的樣子
char c_str[100] = "xxx";
for(char* it = c_str; *it != '\0'; ++it)
// .......
上面是C語言式的迭代, it也是迭代器..
概念上來講, 迭代器可以使指針, 也可以是任何類型, 只要可以用來遍歷容器(數組)就可以了.
用在C++泛型演算法裡面比較多. 比如像下面的泛型函數.
就是接受任何有"迭代器"概念的類型作為參數, 可以使指針, 也可以是其他類型.
template <typename _In, typename _Out>
_Out (_Out _Dest, _In _First, _In _Last);
4. foreach和迭代器的區別 php
迭代器是一種更高級的工具。foreach是簡單的循環語法。雖然功能上看起來相似。但迭代器是工具,這是二者性質上的不同,所以迭代器有更豐富的功能特性,還可以自定義具體的實現。特別是在內存佔用上,迭代器是按需讀取數據,foreach是一次性載入數據。PHP裡面PDO,SimpleXML裡面都有迭代器的具體實現,更完整的全部在SPL擴展部分。
5. python中的迭代器是什麼
迭代器
迭代是訪問集合元素的一種方式。迭代器是一個可以記住遍歷的位置的對象。迭代器對象從集合的第一個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會後退。
1.可迭代對象
以直接作用於for循環的數據類型有以下幾種:
一類是集合數據類型,如list、tuple、dict、set、str等;
一類是generator,包括生成器和帶yield的generator function。
這些可以直接作用於for循環的對象統稱為可迭代對象:Iterable。
2.判斷是否可以迭代
可以使用isinstance()判斷一個對象是否是Iterable對象:
運行結果:
而生成器不但可以作用於for循環,還可以被next()函數不斷調用並返回下一個值,直到最後拋出StopIteration錯誤表示無法繼續返回下一個值了。
相關推薦:《Python視頻教程》
3.迭代器
可以被next()函數調用並不斷返回下一個值的對象稱為迭代器:Iterator。
運行結果:
4.iter()函數
生成器都是Iterator對象,但list、dict、str雖然是Iterable,卻不是Iterator。
把list、dict、str等Iterable變成Iterator可以使用iter()函數:
運行結果:
總結
·凡是可作用於for循環的對象都是Iterable類型;
·凡是可作用於next()函數的對象都是Iterator類型
·集合數據類型如list、dict、str等是Iterable但不是Iterator,不過可以通過iter()函數獲得一個Iterator對象。
·目的是在使用集合的時候,減少佔用的內容。
相關推薦:
三分鍾看懂什麼是Python生成器
6. 有用過PHP SPL的嗎,不知道這主要用來幹嘛
SPL為PHP標准庫。內容主要包括數據結構類,迭代器,異常類,SPL函數,還有一些介面。
數據結構類主要包括棧,隊,堆,數組等基本數據結構,php已經幫你封裝好了,如果你要做數據處理可以直接拿來用,很方便。
迭代器是php在的新特徵,在oop中使用很靈活,比如可以用來遍歷對象數組。
異常類主要是把一些常見異常封裝起來了,做成了介面,通俗將就是有個模版格式,你照著他的要求擴展即可。
SPL函數裡面有個很重要的東西,spl_autoload_register(),在oop中用來實現自動載入。
其它的介面,比如SplObserver,用php這個內置的介面實現觀察者模式很方便。
主要就這些了,如果你想深入了解,可以查看官方手冊。
7. 請問程序裡面的迭代器主要作用是什麼
你好,很高興能為您解答。
迭代器在其實就是指針,讀取集合或者數組中的一個值,讀完以後又指向下一條數據。
迭代器是很好用的一個東西,以java為例,在遍歷list或者map等對象的時候,效率比較高,而且能實現一些for循環不能實現的功能。例如remove。
希望我的回答對你有所幫助
8. python中的迭代器有什麼用
iamlaosong文
我們在用for
...
in
...語句循環時,in後面跟隨的對象要求是可迭代對象,即可以直接作用於for循環的對象統稱為可迭代對象(iterable),如list、tuple、dict、set、str等。
可迭代對象是實現了__iter__()方法的對象,而迭代器(iterator)則是實現了__iter__()和__next__()方法的對象,可以顯示地獲取下一個元素。這種可以被next調用並不斷返回下一個值的對象稱為迭代器。迭代器一定是可迭代對象,反過來則不一定成立。用iter()函數可以把list、dict、str等iterable變成iterator,例如:
bb=[x
for
x
in
range(10)]
cc=iter(bb)
cc.next()
循環變數的值其實可以看著是一次次用next取值的過程,每取一個值,做一次處理。list等對象用於循環實際上可以看著是用iter()方法產生一個迭代器,然後循環取值。
生成器(generator)就是一個能返回迭代器的函數,其實就是定義一個迭代演算法,可以理解為一個特殊的迭代器。調用這個函數就得到一個迭代器,生成器中的yield相當於一個斷點,執行到此返回一個值後暫停,從而實現next取值。
9. 迭代器的作用,寫一個迭代器訪問java的集合
它的作用就是操作集合,遍歷集合元素!
ist l = new ArrayList();
l.add("aa");
l.add("bb");
l.add("cc");
for (Iterator iter = l.iterator(); iter.hasNext();) {
String str = (String)iter.next();
System.out.println(str);
}
/*迭代器用於while循環
Iterator iter = l.iterator();
while(iter.hasNext()){
String str = (String) iter.next();
System.out.println(str);
}
*/