1. STL学习笔记--STL介绍

一、STL介绍

本次课程主要面对有一定 c++ 基础(了解基本语法,熟悉常用特性)的 ,想要学习 c++ 更深入特性 ,掌握 c++ 强大标准库的同学 。通过本次课程,你将学习到 c++ template ,异常处理 ,并回顾数据库的部分知识 ,初步掌握 STL 开发 ,避免重复制造轮子。

  • 将学习到的知识点:
    • 模板编程
    • 泛型编程
    • STL 常用组件
    • lambda表达式
    • 异常处理
    • 内存处理
    • 部分数据结构
    • 部分算法

提示:本课程所有代码至少需要开启 -std=c++11 选项来支持 C++11 相关特性,在介绍 C++14 特性时的相关代码需要开启 -std=c++14 的编译选项,例如:

+ g++ main.cpp -std=c++11
+ g++ main.cpp -std=c++14

如果你没有使用过 STL,那么你是不爱 c++ 的,STL的原名是“Standard Template Library”,翻译过来就是标准模板库。STL 是 C++ 标准库的一个重要组成部分,STL 实现了常用的数据结构和算法 ,蕴含其间的泛型编程和代码复用的思想深刻的影响了编程习惯,像微积分延长天文学家寿命一样,STL延长了程序员的寿命。 STL 由算法容器迭代器适配器仿函数(函数对象)空间适配器六大部件组成 。我们将主要讲解容器,迭代器,算法和仿函数。适配器的部分会交给学员来实现,而空间适配器不会太过于深入。从上往下学习STL,学习曲线不再那么陡峭。

二、容器

鱼缸是容器,瓶子是容器,饭碗也是容器,STL 的容器也不列外。这里的容器首先是一个模板类,在类中实现对数据的操作,而包含这样的类的实现就叫一个容器。STL 有许多这样的容器,它们包括:向量(vector),列表(list),队列(queue),双端队列(deque),优先队列(Priority queue),集合(set),多种集合(multiset),映射(map),多重映射(multimap)。

三、算法

数据结构加算法等于程序,如果说容器实现了数据结构的话,那么算法就是 STL 的灵魂 ,STL 的算法是一种通用的算法,并不依赖于特定的数据结构和对象 。这样的好处是不用针对每种情况编写特定的代码,而是给出一种通用的做法,是代码复用的一种实现方法,模板编程则是泛型编程的基础。

四、迭代器

让我们演示一个简单的函数: add(int &a ,int &b) ,它传入两个引用,然后执行加法操作,可以看到它依赖于 int 这个特定的类型,而且暴露了这个函数的内部结构不利于对底层的隔离和封装。那么 STL 是怎么解决这个问题的呢?他们使用了迭代器(对指针的一种泛化)。迭代器底层是由指针实现的,是容器和算法的桥梁。STL 里大多数容器都实现了自己的迭代器,我们可以使用迭代器来完成对容器的访问。后面我们会详细讲到迭代器的种类,性质,使用,实现。

五、适配器

学习过数据结构的同学大都知道,数据结构不是独立的,部分数据结构是可以相互转换的。比如栈和队列可以互相实现。当我们需要一个碗的时候我们不一定重新制造,我们可以把瓶子的上部去掉。同样的道理,当我们需要队列(queue)的时候,也可以用双端队列(deque)去实现。而queue就叫做适配器。STL有三种基本容器vector,deque,list。有用基本容器扩展的适配器queue,stack等。适配器主要有容器适配器,迭代器适配器,函数适配器,它们的作用范围不同,意思大致一致。后面我们也会详细讲到。

六、仿函数

仿函数又叫做函数对象,其本质是类的对象,一种可回调机制,在类中重载了()运算符,使对象在用()时呈现出函数的特性,所以叫做仿函数。叫仿函数体现了它的作用,叫函数对象体现其本质,大家喜欢叫什么都可以。而为什么需要仿函数呢?因为STL没有也不可能将所有东西都包含到函数中,而程序是对现实的模拟,现实又是最复杂的,一个sort(),你要 < ,我要 > 。如何协调呢?我们可以定义自己需要的仿函数,定制自己的操作。具体的内容我们后面会讲。这儿只做说明。

七、空间适配器

c++ 的一大魅力就是对底层的操作,你像一个魔法师一样,挥舞着魔杖操纵着底层的各种资源。当然一个不好,程序也崩给你看。而空间配置器就是 STL 自己的“内存池”。完成对内存的申请,释放,维护。配置器有两个部分:一级空间配置器,二级空间配置器。本次课程不会过度讲解配置器,感兴趣的同学可以去看一下实验楼另外一个课程:c++ 实现高性能内存池。

八、实验总结

STL 是学习 C++ 路上必须领略的美景,STL 由六个部分组成:容器,迭代器,算法,仿函数,适配器,空间配置器。各个部件相互调用,相互关联。运用泛型,模板,oop等思想,是学习和理解 c++ 这门语言的必经之路。

 

你可能感兴趣的:(C++基础,STL介绍)