第二講
八谱煤、源代碼之分布
1.標(biāo)準(zhǔn)庫(kù)版本
Visual C++
\include文件夾
Dev-C++ 5.11(with GUN 4.9.2)
\4.9.2\include\c++\bits
????????????????? \ext
九、OOP(面相對(duì)象編程)vs GP(泛型編程)
1.OOP
OOP企圖將datas和methods關(guān)聯(lián)在一起
2.GP
GP卻是將datas和methods分開來
3.采用GP
Containers和Algorithms團(tuán)隊(duì)可各自閉門造車舶沿,期間以Iterator溝通即可
Algorithms通過Iterators確定操作范圍,并通過Iterators取用Containers元素谆趾。
4. algorithms
所有algorithms全蝶,其內(nèi)最終涉及元素本身的操作涯曲,無(wú)非就是比大小。
十双吆、技術(shù)基礎(chǔ):操作符重載和模板
1.Operator Overloading操作符重載
???
2.類模板
??? template <typename T>
3.函數(shù)模板
編譯器對(duì)函數(shù)模板進(jìn)行實(shí)參推導(dǎo)
用typename和class都可以眨唬。
4.成員模板
5.Specialzation特化
template<> 空的尖括號(hào)
6.Partial Specialzation 偏特化
1.局部:數(shù)量上的局部
2.局部:范圍的局部
十一、分配器allocators(標(biāo)準(zhǔn)庫(kù)六大部件)
1.operator new()和malloc()
Operator new()中調(diào)用malloc()
malloc()分配的內(nèi)存比需要的大好乐,有額外開銷匾竿。
2.VC6 STL對(duì)allocator的使用
??? Allocator實(shí)現(xiàn)(<xmemory>)
VC6的allocator只是以::operator new和::operator delete完成allocate()和deallocate(),沒有任何特殊設(shè)計(jì)蔚万。
3.BC5 STL對(duì)allocator的使用
BC5的allocator只是以::operator new和::operator delete完成allocate()和deallocate()岭妖,沒有任何特殊設(shè)計(jì)。
4.G2.9 STL對(duì)allocator的使用
<defalloc.h>
GCC2.9的allocator只是以::operator new和::operator delete完成allocate()和deallocate()反璃,沒有任何特殊設(shè)計(jì)区转。
G2.9 STL容器使用的分配器是alloc(沒有使用allocator)<stl_alloc.h>
因?yàn)閙alloc有額外開銷,所以alloc盡量減少malloc的次數(shù)版扩。
??? G4.9標(biāo)準(zhǔn)庫(kù)使用的分配器是allocator废离。G4.9所附的標(biāo)準(zhǔn)庫(kù),有許多extension allocators礁芦,其中_pool_alloc就是G2.9的alloc蜻韭。
十二悼尾、容器之間的實(shí)現(xiàn)關(guān)系與分類
十三&十四、深度探索list
1.list結(jié)構(gòu)
list雙向環(huán)狀鏈表肖方,刻意在環(huán)狀list尾端加一空白節(jié)點(diǎn)闺魏,用以符合STL前閉后開區(qū)間。
list中只有一個(gè)數(shù)據(jù)node俯画,大小是一個(gè)指針大小析桥。
?
2.list’s iterator
(1)5個(gè)type define
(2)++操作符
前++? operator++()
后++? operator++(int)
注意:self tmp = 中=調(diào)用了拷貝構(gòu)造函數(shù)!
C++中如何區(qū)別=調(diào)用的是拷貝構(gòu)造函數(shù)還是拷貝賦值運(yùn)算符艰垂?
區(qū)分初始化和賦值泡仗。
(3)*和->操作符
?
3.G2.9和G4.9
G4.9 list大小是8
十五、迭代器的設(shè)計(jì)原則
1.Iterator需要遵循的原則
(1)分類
(2)距離
(3)Value
2.Iterator必須提供的5種associated types
指針也是一種iterator猜憎,一種退化的iterator娩怎。
3.Traits
Iterator Traits用以分離class iterators和non-class iterators。
??? 范圍的偏特化
無(wú)法賦值的變量胰柑?
十六截亦、vector深度探索
1.vector
vector的大小就是三個(gè)指針。
連續(xù)空間的容器都提供[]操作符柬讨。
insert_aux除了被push_back調(diào)用外崩瓤,還被其他函數(shù)調(diào)用,所以一開始要判斷踩官。
2.vector’s iterator
vector的iterator就是一個(gè)指針却桶。
3.G4.9 vector’s iterator
?
十七、array和forward_list深度探索
1.容器array
array必須指定大小卖鲤,因?yàn)槭枪潭ù笮 ?/p>
沒有ctor肾扰,沒有dtor。
其iterator是native pointer蛋逾。
2.容器forward_list
??? 單向鏈表集晚。