lxidea的 Boolan STL与泛型编程 学习笔记(四)

越到后面愈发感觉C++ STL里面的东西实在太过庞大,尽管侯老师足够深入浅出,但对于普通C++学习者来说,冰山一角也足够喝一壶。

本周的内容看起来比上周的内容更加琐碎。内容依然围绕着STL里面的六大元素进行。不过,本周似乎又再一次强调了算法这个部分。算法是固定的,通过询问迭代器问题来得到关于容器的一些信息,从而采取不同的计算策略来获得最高的效率。

作业看起来一眼无法令人看懂,因此在短暂看过前面关于迭代器和他们的分类之后,就往后跳到了inserter的内容查看了。因此,这篇笔记会在后面继续增加内容

1. 迭代器

struct input_iterator_tag {};   
struct output_iterator_tag {};
struct forward_iterator_tag       : public input_iterator_tag {};
struct bidirectional_iterator_tag : public forward_iterator_tag {};
struct random_access_iterator_tag : public bidirectional_iterator_tag {};

迭代器用了五种结构(类)来区分自己的类型,为什么用类而不是用枚举呢?因为,编译器在调用的时候可以使用C++的多态这种特性,来根据这五种类的继承关系来调用对应类型所适配的算法和函数。

2. 算法与traits的联系

在之前的的第七周的时候介绍过traints, 再简单的回顾一下, traits总共有5个typedef,主要用于告知算法,容器当前的各种信息; 算法根据traits的信息进行偏特化,进行针对性的计算,提高程序效率

template 
{
    iterator_category;    容器的类别
    value_type;
    pointer;
    reference;
    difference_type;    
}
lxidea的 Boolan STL与泛型编程 学习笔记(四)_第1张图片
iterator_category

算法_advance通过容器类型的继承关系,以及模版的偏特化,来根据各个容器的特性计算距离,提高效率

3. 算法

函数模版

仿函数

适配器

inserter适配器

通过inserter适配器的包裹,把foo的insert操作,自动分配内存,适配到inseter重载的=号操作上去


inserter

X 适配器

你可能感兴趣的:(lxidea的 Boolan STL与泛型编程 学习笔记(四))