有一丢丢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

1.STL是啥呀? 

 

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

 

2.容器是啥呀?

 

鱼缸是容器,瓶子是容器,饭碗也是容器,STL 的容器也不列外。这里的容器首先是一个模板类,在类中实现对数据的操作,而包含这样的类的实现就叫一个容器。STL 有许多这样的容器,它们包括:

向量(vector),

列表(list),

队列(queue),

双端队列(deque),

优先队列(Priority queue),

集合(set),

多种集合(multiset),

映射(map),

多重映射(multimap)

 

3算法是啥呀?

 

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

 

4.迭代器是啥呀?

 

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

 

5.适配器是啥呀?

 

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

 

6.仿函数是啥呀?

 

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

 

 

7.空间适配器是啥呀?

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

 

 

 

8.总结一下呗

STL 是学习 C++ 路上必须领略的美景,STL 由六个部分组成:

 

容器,

迭代器,

算法,

仿函数,

适配器,

空间配置器。

 

各个部件相互调用,相互关联。运用泛型,模板,oop等思想,是学习和理解 c++ 这门语言的必经之路。