第二講
八、源代碼之分布
1.標準庫版本
Visual C++
\include文件夾
Dev-C++ 5.11(with GUN 4.9.2)
\4.9.2\include\c++\bits
????????????????? \ext
九、OOP(面相對象編程)vs GP(泛型編程)
1.OOP
OOP企圖將datas和methods關(guān)聯(lián)在一起
2.GP
GP卻是將datas和methods分開來
3.采用GP
Containers和Algorithms團隊可各自閉門造車,期間以Iterator溝通即可
Algorithms通過Iterators確定操作范圍,并通過Iterators取用Containers元素。
4. algorithms
所有algorithms,其內(nèi)最終涉及元素本身的操作,無非就是比大小。
十、技術(shù)基礎(chǔ):操作符重載和模板
1.Operator Overloading操作符重載
???
2.類模板
??? template <typename T>
3.函數(shù)模板
編譯器對函數(shù)模板進行實參推導
用typename和class都可以。
4.成員模板
5.Specialzation特化
template<> 空的尖括號
6.Partial Specialzation 偏特化
1.局部:數(shù)量上的局部
2.局部:范圍的局部
十一、分配器allocators(標準庫六大部件)
1.operator new()和malloc()
Operator new()中調(diào)用malloc()
malloc()分配的內(nèi)存比需要的大,有額外開銷。
2.VC6 STL對allocator的使用
??? Allocator實現(xiàn)(<xmemory>)
VC6的allocator只是以::operator new和::operator delete完成allocate()和deallocate(),沒有任何特殊設計。
3.BC5 STL對allocator的使用
BC5的allocator只是以::operator new和::operator delete完成allocate()和deallocate(),沒有任何特殊設計。
4.G2.9 STL對allocator的使用
<defalloc.h>
GCC2.9的allocator只是以::operator new和::operator delete完成allocate()和deallocate(),沒有任何特殊設計。
G2.9 STL容器使用的分配器是alloc(沒有使用allocator)<stl_alloc.h>
因為malloc有額外開銷,所以alloc盡量減少malloc的次數(shù)。
??? G4.9標準庫使用的分配器是allocator。G4.9所附的標準庫,有許多extension allocators,其中_pool_alloc就是G2.9的alloc。
十二、容器之間的實現(xiàn)關(guān)系與分類
十三&十四、深度探索list
1.list結(jié)構(gòu)
list雙向環(huán)狀鏈表,刻意在環(huán)狀list尾端加一空白節(jié)點,用以符合STL前閉后開區(qū)間。
list中只有一個數(shù)據(jù)node,大小是一個指針大小。
?
2.list’s iterator
(1)5個type define
(2)++操作符
前++? operator++()
后++? operator++(int)
注意:self tmp = 中=調(diào)用了拷貝構(gòu)造函數(shù)!
C++中如何區(qū)別=調(diào)用的是拷貝構(gòu)造函數(shù)還是拷貝賦值運算符?
區(qū)分初始化和賦值。
(3)*和->操作符
?
3.G2.9和G4.9
G4.9 list大小是8
十五、迭代器的設計原則
1.Iterator需要遵循的原則
(1)分類
(2)距離
(3)Value
2.Iterator必須提供的5種associated types
指針也是一種iterator,一種退化的iterator。
3.Traits
Iterator Traits用以分離class iterators和non-class iterators。
??? 范圍的偏特化
無法賦值的變量?
十六、vector深度探索
1.vector
vector的大小就是三個指針。
連續(xù)空間的容器都提供[]操作符。
insert_aux除了被push_back調(diào)用外,還被其他函數(shù)調(diào)用,所以一開始要判斷。
2.vector’s iterator
vector的iterator就是一個指針。
3.G4.9 vector’s iterator
?
十七、array和forward_list深度探索
1.容器array
array必須指定大小,因為是固定大小。
沒有ctor,沒有dtor。
其iterator是native pointer。
2.容器forward_list
??? 單向鏈表。