一、迭代器用來幹嘛的?
本質是指標,用來遍歷訪問容器中元素的。
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日 耀眼的東西總能吸引人,比如人民幣,比如美女。要想讓那些不那麼耀眼,建議出門時請帶好墨鏡。墨鏡 是個好東西,能沖淡些光,讓咱少些刺激。你們受的刺激還少莫?反正我是受夠了,好的 不好的 呵呵,多少有點意思。但俺們有時也俗,因為不俗俺們就好像沒有活下去的必要...