c++11STL之容器

容器

首先看一下容器在STL中的位置:
c++11STL之容器 可以看到,容器是STL中很重要的一部分。从字面意思理解,容器就是存贮东西的地方。
容器是存贮数据的地方,在泛型的基础上,设计的用于数据存贮、运算、表示的模型,称之为容器。

容器的特点之内存托管

语言的发展历史从c到c++到java到python,其中有一个不同就是内存的管理机制。
在c中,内存需要手动申请,手动释放。就是需要吃完饭自己洗碗。python是吃完饭不要自己洗碗。这就是内存托管。
容器采用了内存的托管机制,也就是说,放入容器中的对象,对象内存由容器来统一管理,我们只需要使用容器即可。
但如果托管的是指针,容器只负责,指针本身的内存大小,而其指向的空间还要作单独处理。

容器的分类

容器的分类是根据底层的数据结构来进行划分的
c++11STL之容器容器主要分为四类:
1.有序容器sequence containers
2.关联容器associative containers
3.无序容器 unordered containers
4.容器适配器 container adapter
但是图中没有体现出第四种容器,容器适配器,这是因为容器适配器没有单独的内存模型,容器适配器是基于以上容器形成的。
容器适配器有三种:stack,queue,priority_queue ,其中stack和queue是基于deque实现的,priority_queue是基于vector实现的。
为什么需要容器适配器呢,比如vector是一个牛刀,现在要杀一只鸡,用牛刀太浪费了,所以priority_queue出现了,它就是一个鸡刀,用来杀鸡,省力而且顺手。

容器的适用场景

vector deque list set mulitset map mulitmap
内部结构 dynamic array array of arrays double linked list binary tree binary tree binary tree binary tree
随机存取 是(通过key)
搜索速度 很慢
快速插入移除 尾部 首尾 任何位置 - - - -