迭代器是神馬東西

2022-04-08 18:32:50 字數 915 閱讀 5947

一、迭代器用來幹嘛的?

本質是指標,用來遍歷訪問容器中元素的。

stl實現了容器和演算法的分離,如何實現的呢,答曰用類模板和函式模板,也可理解為所謂的泛化。那麼容器和演算法又是怎樣結合在一起的呢,答曰迭代器——使用演算法時,傳給演算法的是迭代器!

二、迭代器常用運算。

所有標準庫容器的迭代器都提供*iter    iter->mem    ++iter   --iter    iter1 == iter2   iter1  !=  iter2等。

但是只有vector和deque支援 iter + n  iter – n  iter1 += iter2   iter1 – iter2   和  關係運算子。

從容器的儲存方式上很好理解原因(連續 、 節點式/鏈式)。

三、迭代器的種類。

輸入迭代器   輸出迭代器   前向迭代器(slist)  雙向迭代器(list)  隨機訪問迭代器(vector 、deque) 。

從迭代器支援的運算,或者從容器的儲存結構上理解。如slist單向鍊錶——只允許訪問下乙個元素;vector連續儲存,可以訪問任意乙個(++ 、-- 、 iter + n等)。

四、為什麼需要迭代器型別,如何實現迭代器型別的?

通過上面分析,我們知道迭代器將容器和演算法結合在一起,給演算法乙個迭代器,可以完成相應操作,如果演算法需要知道迭代器所指物件的型別呢?

我們想到用function template實現,但是如果返回值就要知道所指物件的型別,function template就不行了。

然後想到用內嵌型別,即將迭代器定義為class type,將所指物件型別value_type作為迭代器類的成員。但是原生指標不是class type,而演算法必須能夠接受原生指標,怎麼辦?

最終stl採用偏特化traits獲取迭代器型別,即如果是原生指標,定義乙個特化版本。

task struct到底是個神馬東西?

上回我們說到了常用的作業系統程序排程演算法,學過作業系統的同學應該都知道作業系統的四大職能 程序管理 記憶體管理 裝置管理以及檔案系統的管理。那麼最重要的職能之一 程序管理,是如何進行的呢?首先在要管理乙個程序的時候,我們需要知道某個程序的具體資訊,比如程序的pid 優先順序等等,所以我們就需要乙個...

區塊鏈到底是神馬鬼東西

區塊鏈 的概念火了,但節奏較快的網際網路世界仍有很多人不了解何為 區塊鏈 即便網上有太多介紹此物的 名詞解釋 但也都過於古板和難懂,那麼今天我給大家講個 故事 讓更多使用者秒懂何為 區塊鏈 區塊鏈本質上是乙個分布式的公共賬本,聽起來很矇圈?別急,後面會用最深入淺出的方式來一一解釋。任何人都可以對這個...

咦,神馬東西晃到洒家了

咦,神馬東西晃到洒家了?2011年12月27日 耀眼的東西總能吸引人,比如人民幣,比如美女。要想讓那些不那麼耀眼,建議出門時請帶好墨鏡。墨鏡 是個好東西,能沖淡些光,讓咱少些刺激。你們受的刺激還少莫?反正我是受夠了,好的 不好的 呵呵,多少有點意思。但俺們有時也俗,因為不俗俺們就好像沒有活下去的必要...