标准: C++的一个标准库,不管是在Windows还是Linux,只要安装相关的C++编译器,库中的所有容器都会相应的安装到本地的操作系统,可以直接包含相应头文件进行使用
模板: STL提供的类库都是使用模板实现的。好处是想用这些算法处理什么样的类型就用什么样的类型实例化这些模板就可以了。比较通用的代码
一、标准容器
1.顺序容器
vector:向量容器
deque:双端队列的容器
list:链表容器
顺序容器的区别
2.容器适配器
怎么理解这个适配器?
- 1.适配器底层没有自己的数据结构,它是另外一个容器的封装,它的方法全部由底层依赖的容器进行实现的
- 2.没有实现自己的迭代器
设计模式中有一个适配器模式,但是这里的适配是一种很牵强的适配器模式,如果非要说设计模式更像是代理模式,stack代理了底层容器deque的一些方法而已
stack:先进后出
queue:先进先出
priority_queue:优先级高的先出
3.关联容器
无序关联容器:链式哈希表增删查O(1)
unordered_set
unordered_multiset
unordered_map
unordered multimap
有序关联容器:红黑树增删查o(log2n)2是底数(树的层数,树的高度)
set
set由于底层实现是红黑树,所有会进行排序,当存储自定义类型是set无法判断比较大小,故需要用户提供 ’ < ’ 运算符的重载
multiset
map
由于以下自定义类型存储在map中比较大小的key是int类型,所有不需要用户提供 ’ < ’ 运算符的重载,但是由于map使用【】运算符时,如果没有该key,则会插入make_pair(key,Student()),所有此时需要默认的构造函数
multimap
二、近容器
数组
string
bitset (位容器)
三、迭代器
正向迭代器: iterator和const_iterator
反向迭代器:reverse_iterator和const_reverse_iterator
四、函数对象
什么叫函数对象
使用函数对象的好处
函数对象就是C语言里面的函数指针,函数对象所能完成的功能,函数指针都可以实现。但是C++为什么还需要实现函数对象呢?
greater
less8
五、泛型算法