《STL原始碼剖析》學習備忘

2021-04-13 12:29:32 字數 1364 閱讀 5142

目錄:

皰丁解牛(侯捷自序)

目錄前言

第1章 stl概論與版本簡介

第2章 空間配置器(allocator)

第3章 迭代器(iterators)概念與traits程式設計技法

第4章 序列式容器(sequence containers)

第5章 關聯式容器(associattive containers)

第6章 演算法(algorithms)

第7章 仿函式(functors,另名 函式物件function objects)

第8章 配接器(adapters)

附錄a 參考書籍與推薦讀物

附錄b 候捷**(本書支援站點簡介)

附錄c stlport 的移植經驗(by孟巖)

索引 【3 iterator traits】

演算法要泛化,iter要有相同動作。但其實現細節不可避免地因容器而異。所以容器負責提供iter。不同容器需要不同iter型別。

演算法要根據不同容器、不同元素因地制宜提高效率。iter型別代表容器,*iter代表元素。演算法內部不可避免要用到iter所指元素的型別(如,提供臨時變數)。

c++沒有typeof(),編碼時無法指定iter所指元素的相關型別如int,int *,const int&。

函式模板的引數推導機制可行:f(t iter) ,g(t1 iter,t2 t) 途徑t-iter--*iter-t2,不能推導返回引數

類模板宣告內嵌型別可行:iter t::type func(t iter ) ,但對指標型iter,無法指定type。

模板偏特化機制可行:加iterators_traits可以為指標提供特化版本,其他就多一層。這樣同一建立內部型別,更完善(**簡潔)。

但是,如果iterators_traits::value_type將得到cont int,而我只想要int!再來個偏特化。

value、diffrence、ref、pointer、iter_cate

演算法需要知道iter之類。分支判斷可行(執行期決定)。應該編譯期確定。

每個iter都要指明相關型別(typedef ),自製選itertor模板;iterators_traits從t獲知相關型別。每個演算法都要知道iter種類,並由此呼叫相關子函式。關鍵:用class做標籤。

例子:advance(iter,n)-->引數推導出t-->typedef trait::cate tag()-->呼叫 _advance(iter,n,tag())-->無名物件也是物件-->實參推導出型別-->函式過載出函式。

所謂stl,就是利用編譯器的推理完成確定的事情,如求和1~100。這樣編譯時間長,**簡潔優化。多用inline,const,&

STL原始碼剖析

這兩天略讀完了 stl原始碼剖析 之所以是略讀,就是只看大體,不講具現 這個詞在 深度探析c 物件模型 中比較多 已經看過好幾本c 的書了,感覺c 本身設計的博大精深,而c 編譯器就更是乙個神奇的東西,換句話說,你永遠不知道c 編譯器揹著你做了哪些出乎你意料的事 不扯遠了 我主要是想看stl容器的具...

STL原始碼剖析

這兩天略讀完了 stl原始碼剖析 之所以是略讀,就是只看大體,不講具現 這個詞在 深度探析c 物件模型 中比較多 已經看過好幾本c 的書了,感覺c 本身設計的博大精深,而c 編譯器就更是乙個神奇的東西,換句話說,你永遠不知道c 編譯器揹著你做了哪些出乎你意料的事 不扯遠了 我主要是想看stl容器的具...

STL原始碼剖析

花了兩天時間略讀了一下 stl原始碼分析 看了個大體,對於細節並沒有深究。之所以想翻翻這本書,主要是想看看stl中的特性 介面卡的具體實現。看完之後收穫還是蠻大的,模板的各種組合讓我眼前一亮,下面大概總結一些內容。1.記憶體分配 sgi記憶體分配採用兩級實現,對於大記憶體塊的申請 大於128k 由第...