对于现在的计算机编程语言来说,语言和库已经形成了两大体系。只学一门语言可以实现自己想要的功能,也可以写出各式各样的程序,但是,不得已需要提一句,对于现在技术的发展速度来说,开发的效率变得尤为重要。而仅仅会一门编程语言,在现阶段其实已经成为了一件无意义的事。那么拿语言和数据结构来举例,他们俩已经是两个独立的体系了,而数据结构对于开发而言,基本的代码实现都是差不多的。那么,开发不同的系统,意味着会有巨大的重复过程要做,而这类重复过程其实也就是不断的*** 造 轮 子 ***的过程。先抛开,自己制造的轮子的开发效率问题不谈,那么自己制造的轮子,也不一定有在市场上购买的轮子质量过硬。那么,在很多时候,自造轮子,其实是一件得不偿失的事,因此:
*** 1.开发效率变慢 2. 且质量不一定是最好的 ***
那么语言学中,重要的一点就是库的学习。那么,现在来说,每种语言,在各自的特定领域都会有特定的库来实现想要的功能。比如Python的爬虫领域就有requests库等,深度学习算法领域常用到Caffe、Tensorflow库等等。这些呢其实已经是一些专用的库,可以实现一些特定需求中的特定功能,而无需自己从0开始写。而这些库其实是一些功能库,但再往底层查看,***程序最根本的目的是为了操作一些数据 *。而这限额护具的组织方式其实是一件十分重要的是,记得我在前面说过关于一个 钥匙和箱子的故事 **,这里面详细说明了,当数据量足够大的时候,出现的一些问题,其实也就是数据结构的问题,而数据结构其实多于每个程序来说都是必须要面对的。那么每个语言非常重要的是要有一套面向底层数据的库,而在c++中就是标准库(c++ Standard Library)。
引用下面图片中这本书的一句话:
不会使用标准库的C++程序员算不上是一个有开发效率的程序员
那么说了这么多,今天的主要目的就是初步的来看看标准库的那些事。
C++标准库的体系结构
C++标准库的设计思想
- C++标准库,主要使用的是泛型编程(Generic Programming)的思想,而不是采用了面向对象的的主要思想。
C++ Standard Library Vs. Standard Template Library
- 标准库中包含STL
- STL主要由六大部件组成(后续详谈)
程序中标准库的引用
- C++标准库的header files不包括扩展名(.h),例如
#include <vector>
- 新式的C header files不带扩展名,前面需要添加c,例如
#include <cstdlib>
- C语言中引入的方式依然可以用,例如
#include <stdlib.h>
C++标准库的命名空间
- C++标准库的命名空间全部是
std
- 如果使用C语言中的库,不封装在
std
的命名空间中 - 打开方式
- 统一打开
using namespace std;
- 逐条打开
using std::cout; using std::cin;
- 统一打开
C++标准库的资料库
STL的六大部件
组建之间的关系
- 操作容器中的数据的算法是独立存在的
- 容器和算法之间的桥梁是迭代器(一种泛化的指针)
- 分配器负责给容器分配、释放内存空间
- 仿函数,模仿函数一样的对象
- 适配器,实现一些转换
//六大部件的使用
#include <vector>
#include <algorithm>
#include <functional>
#include <iostream>
using namespace std;
int main()
{
int ia[6] = {27, 210, 12, 47, 109, 83};
vector<int, allocator<int>> vi(ia, ia+6);
//vector:Container
//allocator<int>:Allocator,不写使用默认的
cout << count_if(vi.begin(), vi.end(), not1(bind2nd(less<int>(), 40)));
// count_if(...): Algorithm
// not1(...): Function adapter(gegator)
// bind2nd(....): function adapter(binder)
// less<int>: function object
return 0;
}
- 关于算法的复杂度
- 时间复杂度