2018-02-10

2018-02-10  本文已影响0人  MrCool_5484

Boolan STL 第二周

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

使用GP的好处:

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,大大减少系统开销。

容器结构再分类:

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

list的iterator的实现:

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

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

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

完整的iterator_traits:

vector的代码实现:

vector的push_back实现:

vector的iterator实现:

array实现:

上一篇 下一篇

猜你喜欢

热点阅读