2018-02-10

Boolan STL 第二周

OOP与GP区别:OOP总是将data与methods关联在一起,GP则是将data与methods分开。

使用GP的好处:

2018-02-10_第1张图片


algorithms的本质:最终都是元素之间比大小。

list为什么不能使用::sort()?:因为list内部元素是分开的,它的iterator不是random access iterator,无法使用algorithm提供的sort()。

无法被overload的符号:"::",".",".*"

allocator中的operator new()实现:调用malloc(),会额外占用空间记录申请内存大小(cookies)和填充pad到16的倍数,所以申请小块空间相较于申请大块空间的空间利用率会小的多。

G2.9的alloc优点:分成16块空间,从8byte开始每块空间存放的元素递增8byte,第16块空间存放元素为128byte,每块空间后面存放的元素之间没有cookies,只在整块前后有cookies,大大减少系统开销。

2018-02-10_第2张图片

容器结构再分类:

2018-02-10_第3张图片

list(双向循环链表结构):

2018-02-10_第4张图片

list的iterator的实现:

2018-02-10_第5张图片


2018-02-10_第6张图片

iterator的实现的区别:除vector、array直接使用其指针外其他容器的iterator都是由smart pointer实现。

iterator必须提供的五种供algorithms的associated type:

2018-02-10_第7张图片

iterator traits的用途:区分class iterator和non-class iterator,利用偏特化来实现5种associated type的提供,主要是为pointer类型提供typedef的功能。

2018-02-10_第8张图片

完整的iterator_traits:

2018-02-10_第9张图片

vector的代码实现:

2018-02-10_第10张图片

vector的push_back实现:

2018-02-10_第11张图片
2018-02-10_第12张图片

vector的iterator实现:

2018-02-10_第13张图片

array实现:

2018-02-10_第14张图片

你可能感兴趣的:(2018-02-10)