Boolan STL 第二周
OOP與GP區(qū)別:OOP總是將data與methods關(guān)聯(lián)在一起,GP則是將data與methods分開。
使用GP的好處:

algorithms的本質(zhì):最終都是元素之間比大小。
list為什么不能使用::sort()?:因為list內(nèi)部元素是分開的,它的iterator不是random access iterator,無法使用algorithm提供的sort()。
無法被overload的符號:"::",".",".*"
allocator中的operator new()實現(xiàn):調(diào)用malloc(),會額外占用空間記錄申請內(nèi)存大?。╟ookies)和填充pad到16的倍數(shù),所以申請小塊空間相較于申請大塊空間的空間利用率會小的多。
G2.9的alloc優(yōu)點:分成16塊空間,從8byte開始每塊空間存放的元素遞增8byte,第16塊空間存放元素為128byte,每塊空間后面存放的元素之間沒有cookies,只在整塊前后有cookies,大大減少系統(tǒng)開銷。

容器結(jié)構(gòu)再分類:

list(雙向循環(huán)鏈表結(jié)構(gòu)):

list的iterator的實現(xiàn):


iterator的實現(xiàn)的區(qū)別:除vector、array直接使用其指針外其他容器的iterator都是由smart pointer實現(xiàn)。
iterator必須提供的五種供algorithms的associated type:

iterator traits的用途:區(qū)分class iterator和non-class iterator,利用偏特化來實現(xiàn)5種associated type的提供,主要是為pointer類型提供typedef的功能。

完整的iterator_traits:

vector的代碼實現(xiàn):

vector的push_back實現(xiàn):


vector的iterator實現(xiàn):

array實現(xiàn):
