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其实是适配器,而不叫容器,因为是对容器的再封装)
priority_queue
底层数据结构一般为vector为底层容器,堆heap为处理规则来管理底层容器实现
set
底层数据结构为红黑树,有序,不重复
multiset
底层数据结构为红黑树,有序,可重复
map
底层数据结构为红黑树,有序,不重复
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。