STL与泛型编程第二周boolan

课上版本GNU2.91


OOP面向对象编程与GP泛型编程

       OOP:数据和操作放在一起    

       GP:将数据和操作分开来

如果容器自带sort则用容器自带的

算法涉及元素本身的操作就是比大小


STL与泛型编程第二周boolan_第1张图片

相当于是重新定义了一个操作将之替换为=原来默认的<

技术基础:操作符重载and模板(泛化 全特化 偏特化)

    不可重载的操作符

STL与泛型编程第二周boolan_第2张图片

_list_iterater

类模板(定义类)

函数模板(定义函数)

注:template和template功能相同

成员模板

特化specialization

STL与泛型编程第二周boolan_第3张图片
注意语法

template//泛化

struct __type_traits{}

template<> struct  __type_traits{}//特化



STL与泛型编程第二周boolan_第4张图片

partial Specialization

    个数上的偏————有两个模板参数 绑定其中一个

STL与泛型编程第二周boolan_第5张图片

范围上的偏————

STL与泛型编程第二周boolan_第6张图片

分配器allocators(不建议使用)

    operator new() 和 malloc()

VC6所附的标准库,其allocator实现如下()

STL与泛型编程第二周boolan_第7张图片
STL与泛型编程第二周boolan_第8张图片

int*p = allocator().allocate(512,(int*)0);//分配

allocator.deallocate(p,512);//还


BC5对allocator的使用(容器使用分配器)

    所有容器第二个模板参数都是class Allocator = allocator

BC5所附的标准库,其allocator实现如下

STL与泛型编程第二周boolan_第9张图片


STL与泛型编程第二周boolan_第10张图片

注:用法和vc一样  但vc没有默认值----BC---int*p = allocator().allocate(512);//分配

G2.9所附的标准库,其allocator实现如下

STL与泛型编程第二周boolan_第11张图片

注:若果区块大 则开销所占比例小,而现实中通常区块小

G4.9所附的标准库,其allocator实现如下

STL与泛型编程第二周boolan_第12张图片

operate new 调用 malloc

operate delete 调用free

4.9中的__pool_alloc就是2.9中的alloc

容器 -- 结构与分类


STL与泛型编程第二周boolan_第13张图片

g2.9几乎没有继承

注:slist名为forward_list,hash_set名为unordered_set

容器 list(2.9--4 vs 4.9--8)

STL与泛型编程第二周boolan_第14张图片
list实现

所有的容器除了vector之外和array之外都必须是class

list的iterator设计

所有的容器都要有typedef 必须是iterator

    type++的设计 :1.记录原址self tmp = *this; (不会唤起operator*,其实是唤起copy ctor用以创建tmp并以*this 为初值 不会唤起ope 因为*this已被解释为ctor的参数) 2.进行操作 ++*this; 3.返回原址return tmp;

注:c++不允许后++两次 故itrator前++写成self& operator++() {node = (link_type)......   (前++没有&)


Iterator设计原则和 iterator traits的作用和设计

iterator traits——用于萃取iterator特性,那算法如何获知迭代器的属性呢?这一任务就是traits完成的。在STL实现中,traits编程技术得到大量的运用,它利用了“内嵌类型”的编程技巧与C++的template参数推导功能,弥补了C++类型识别方面的不足。通过traits,算法可以原汁原味的将迭代器的属性萃取出来,帮助算法正确高效的运行。

Iterator需要遵循的原则

Iterator需要回答Algorithms的五种问题

        1.iterator_category    2.difference_type    3.value_type    4.reference    5.pointer(4 5没有用过)

1.iterator_traits——用以分离class iterators 和non-iterator


STL与泛型编程第二周boolan_第15张图片
p93

你可能感兴趣的:(STL与泛型编程第二周boolan)