1. 程式人生 > >C++迭代器和泛型程式設計的理解

C++迭代器和泛型程式設計的理解

今天讀到了primer plus的泛型程式設計迭代器部分(16章第四小節),稍作記錄

前面閱讀的部分,講了很多繼承,友元,還有模板類的概念;這些都有一個共同點,那就是提高程式碼的重用性;當然友元也不僅僅是這一方面,還有在資料方面的保護和隱私許可權考慮等。從提高程式碼的重用性來說,這也是 泛型思想和麵向物件思想的 共通點之一。

原文:面向物件程式設計注重程式設計的資料方面,泛型注重於程式設計的演算法方面。他們的共同點有程式碼重用和抽象。

然後我看了一下後文,泛型關注於演算法的實現,比方說,實現find()函式,我要獨立於資料結構,也就是說對於連結串列和陣列,可以用同一個find函式,那就有問題了,用什麼去統一不同資料結構的遍歷呢?沿著這個問題引出了 --迭代器的概念(迭代器也被稱為廣義的指標),也就是說為了在不同的資料結構抽象出共同的演算法,我需要其他的中介--迭代器(指標是一種),一道這,我想起了,這不就可以在每個資料結構的類裡面,定義一個實現  迭代器的內建類不就行了嗎?貌似看著還行,繼續看下去,求證下。

迭代器這裡分為了五種,無非是控制讀寫的全寫,單雙向,隨機訪問的搭配,形成搭配的層次結構的迭代器;只需要記住兩個關鍵點就行了:

1.迭代器是為了泛型程式設計服務的,泛型程式設計講究的是一個抽象的演算法,演算法需要操作資料結構啊,那我演算法需要如何從不同的資料結構抽象相同的操作,中介的任務就是你每一個數據結構所匹配的迭代器所要完成的事情嘛;

2.然後第二個就是,如無必要,勿增實體了,如果我只要求 :只讀,或者只寫,單向訪問。。。某一個操作,你就不用全都給我這些功能,這也是資料安全考慮吧

3.迭代器比較重要的兩個特性:解除引用(*)和i++操作了(這一點不關鍵)

當然迭代器的五種分類還是留一個影響吧:輸入迭代器,輸出迭代器,正向迭代器,雙向迭代器,隨機訪問迭代器 ;

不像人話,舉個栗子:輸入迭代器----為演算法抽象出僅僅包含不同資料結構的資料輸入的廣義指標。(湊合理解一下啊)

下一個問題:迭代器的概念如何落實到c++的特性上呢?