C++ STL库

STL中六大组件:

容器(Container)

一种数据结构,如list,vector,和deques ,以模板类的方法提供。为了访问容器中的数据,可使用由容器类输出的迭代器;算法

迭代器(Iterator)

提供了访问容器中对象的方法。例如,可使用一对迭代器指定list或vector中的必定范围的对象。迭代器就如同一个指针。事实上,C++的指针也是一种迭代器。可是,迭代器也能够是那些定义了operator*()以及其余相似于指针的操做符地方法的类对象;数组

算法(Algorithm)

是用来操做容器中的数据的模板函数。例如,STL用sort()来对一个vector中的数据进行排序,用find()来搜索一个list中的对象,函数自己与他们操做的数据的结构和类型无关,所以他们能够在从简单数组到高度复杂容器的任何数据结构上使用;数据结构

仿函数(Function object)
迭代适配器(Adaptor)
空间配制器(allocator)

STL 容器底层数据结构实现

vector      

底层数据结构为数组 ,支持快速随机访问函数

vector是咱们用到最多的数据结构,其底层数据结构是数组,操作系统

当咱们新建一个vector的时候,会首先分配给他一片连续的内存空间,当经过push_back向其中增长元素时,若是初始分配空间已满,就会引发vector扩容,其扩容规则在gcc下以2倍方式完成:首先从新申请一个2倍大的内存空间;而后将原空间的内容拷贝过来;最后将原空间内容进行释放,将内存交还给操做系统;指针

list            

底层数据结构为双向链表,支持快速增删对象

deque       

底层数据结构为一个中央控制器和多个缓冲区排序

stack        

底层通常用list或deque实现,封闭头部便可,不用vector的缘由应该是容量大小有限制,扩容耗时内存

queue     

底层通常用list或deque实现,封闭头部便可,不用vector的缘由应该是容量大小有限制,扩容耗时(stack和queue实际上是适配器,而不叫容器,由于是对容器的再封装)it

priority_queue

底层数据结构通常为vector为底层容器,堆heap为处理规则来管理底层容器实现

set                   

底层数据结构为红黑树,有序,不重复

multiset

底层数据结构为红黑树,有序,可重复

map                

底层数据结构为红黑树,有序,不重复