python:for loop的對(duì)象必須是一個(gè)可迭代對(duì)象
在python中經(jīng)常會(huì)遇到這樣的一個(gè)代碼:
list是一個(gè)有序的列表。我們可以根據(jù)順序來for循環(huán)遍歷整個(gè)list。使用string和tuple的時(shí)候也可以這樣子for loop 遍歷。這是非常符合代碼直覺的,因?yàn)楸闅v的都是有序的對(duì)象。然而我們使用字典的時(shí)候,無序的對(duì)象我們依然能夠進(jìn)行for loop遍歷。
因?yàn)閒or loop要求對(duì)象是一個(gè)可迭代的對(duì)象(iterable)。
上面的代碼使用子這個(gè)仍然能夠順利的打印出列表中的元素。因?yàn)榱斜硎且粋€(gè)可迭代的對(duì)象(iterable)而且也是迭代器(iterator)我們可以根據(jù)迭代器的next(it)函數(shù)去迭代,依次訪問每一個(gè)元素。
總的來說:iterable和iterator的定義是相近的,在使用的時(shí)候可以把iterable當(dāng)成一個(gè)container,而iterator是一個(gè)迭代器,可就和索引一樣,可以通過next()方法依次獲取這個(gè)容器中的每一個(gè)元素。
一般來說一個(gè)iterable對(duì)象都要求他是一個(gè)iterator。而一個(gè)iterator也要求他是一個(gè)iterable對(duì)象。
用鏈表舉例子:自己定義一個(gè)可迭代對(duì)象:
這個(gè)代碼就是鏈表,可通過for loop使用迭代器迭代遍歷整個(gè)鏈表
也可以顯示的使用迭代器
也可以這樣子更直接的使用迭代器。next(it)獲取下一個(gè)迭代對(duì)象。
其實(shí)在C++的STL一直在使用迭代器,無論是向量、棧、鏈表,還是隊(duì)列,都是顯式的利用迭代器。使用的方法都是需要申明一個(gè)迭代器,然后讓這個(gè)可迭代對(duì)象生成一個(gè)iterator。這個(gè)迭代器就可以和索引一樣遍歷可迭代對(duì)象的所有元素,在C++中的迭代器有正向,反向,雙向。迭代器的屬性也有begin,end。迭代的時(shí)候直接it++或者it--進(jìn)行迭代。
下面是C++代碼使用iterator遍歷向量vector