## OOP&GP ##
OOP企图将datas和methods关联在一起,GP则是将datas和methods区分开。
使用全局sort必须提供RandomAccessIterator。
使用GP,Containers和Algorithms可以各自闭门造车,其间以Iterator联通即可。
Algorithms通过Iterator确定操作范围,并通过Iterator取用container的元素。所有algorithm其内最终涉及元素本身的操作,无非就是比大小。
它们之间的关系
OPerator Overloading
Class Template
Function Template
Member Template
Allocator
分配器(Allocator)是容器管理内存的工具,在容器申请内存空间上起作用。分配器在底层实现上通过operator new()和operator delete()来完成内存分配和释放,而operator new()和operator delete()实际上是通过调用malloc()和free()函数来实现操作。operator new()和operator delete()的源代码如下:
- VC6的Allocator
- BC5的Allocator
- G2.9的Allocator
- G4.9的Allocator
由以上各编译器中allocator的源代码可以看出,无论是VC、BC还是GNU的版本中分配器实际上是通过operator new和operator delete来调用malloc和free来管理内存。但是在GNU2.9中,容器实际使用的并非是allocator,而是alloc。
其实现如下:
管理也是通过malloc和free,但是可以避免其他额外开销,比如cookie,实现过程如下:
(1)设计了16条链表,每条链表负责某种特定大小的区块,比如第0条链表负责8个字节大小的区块,第1条负责16个字节,以此类推,即(标号数+1)*8;
(2)容器的元素大小都会调整到8的倍数,比如50的会调整到56,然后交给第6条链表负责;
(3)分配器查看链条有没有挂内存块,如果没有,向操作系统要内存,得到的内存块除了头尾有cookie,中间的每一小块内存都不带cookie;
容器的结构与分类
- Iterator
迭代器必须能够回答算法的提问
它必须提供五种associated types
- list
list的结构
list的iterator
- traits
- vector
- array
- forward_list
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。