最透徹的迭代器理解

2021-10-09 22:15:25 字數 893 閱讀 5142

對內部資料進行封裝遮蔽

可以無限擴充但只有乙個物件

迭代器可以只new乙個物件 卻將乙個容器中的所有的資料都讀出來

意圖:訪問聚合物件內容而不暴露其內部結構。

提供簡單明瞭的獲取集合型別物件的方式。

itearator 就相當於乙個人用手從雞窩裡掏雞蛋 人是看不見雞窩裡有多少個雞蛋的 用手掏的時候 如果有就是next 如果沒有 就是false 在這個過程中人的手就相當於乙個迭代器

迭代器的流程就像是給一瓶未做任何處理的酒進行加工一樣,流程一需要發酵,流程二需要灌裝,流程三是給酒瓶貼標籤,流程四是給酒瓶加上包裝盒,最後乙個是將這一整個流程啟動(就像乙個開關).整個流程就是乙個流水線,所有的流程都在乙個傳送帶上,酒瓶是乙個乙個來的,就像是迭代器中的hasnext和next,每個流程只會將傳送帶傳過來的酒瓶進行操作(如果有酒瓶傳過來,就操作,沒有的話就停了),所有流程的開啟是最後乙個觸發了流程的開關

-----所以迭代器中的邏輯也是抽象的,不觸發那個開關不會執行迭代器中的操作.

我們知道迭代器(iterator)是一種物件,它能夠用來遍歷標準模板庫容器中的部分或全部元素。那麼iterator迭代器的設計原理是什麼呢?迭代器為什麼定義了乙個介面,而不是乙個類呢?

我們假設迭代器迭代資料的功能定義為了乙個類,那麼,會有這樣的問題。不同的集合,由於資料結構不一樣,所以他們的儲存方式也是不一樣的。也就是說,迭代器獲取的時候,獲取的方式是變化的,也就是不固定的。所以把這種方式定義為具體的實現是不合理的。

無論何種集合,他們肯定都有獲取的功能,而且不知道什麼時候就沒有資料了。所有他們也會有判斷功能。於是,就把判斷和獲取功能抽取出來,定義在介面中。這樣的話,將來無論是哪種集合在遍歷的時候,它們自己只要去實現迭代器介面即可。

理解迭代器

在學習c stl的時候,整天碰到迭代器,也整天用,但是,到底它是個什麼東西,很多人沒有乙個認識。這裡我通過幾個小的demo,來看看迭代器。首先我實現了乙個十分簡陋的vector類 cpp template class vector t begin void insert t d typedef t ...

理解Python的迭代器

首先,廖雪峰老師的教程中解釋了迭代器和生成器,這篇文章只是補充和我個人的總結。可以直接作用於for迴圈的物件統稱為可迭代物件 iterable 可以被next 函式呼叫並不斷返回下乙個值的物件稱為迭代器 iterator 所有的iterable均可以通過內建函式iter 來轉變為iterator。對...

js閉包的理解 目前網上分析的最透徹文章

js的閉包對於大家實際上並不陌生,但是真正敢說自己完全理解的人並不多。筆者在網上看到分析閉包的文章非常多,篇幅用的非常多,但是實際上分析的並不到位,或者根本就是不正確的。我有時候都在想,寫這些文章的人自己未必真的理解了。今天我就為大家說到說到js的閉包,看完你百分百的能夠理解。說閉包之前,我們先要說...