STL容器主要分为
顺序容器 vector(向量容器) deque(双端队列容器) list(双向链表)
关联容器 set(单重集合) multiset(双重集合) map(单重映射表) multimap(多重映射表)
容器适配器 stack(栈) queue(队列) prority_queue(优先级队列)
1.vector容器 vector容器是一个动态数组的结构,在内存中有一个指针指向一块连续的内存。类似数组结构一样。它的特点支持随机访问数据,因为其在内存中的单元是连续。如此之外,还可以vector的大小是可以自动增长的。当向一个vector中继续存放数据的时候,如果当前的内存大小不够,内核会重新生成一个是原来两倍的大小的单元,之后 将数据从原先的单元中拷贝至新创建的单元中,并将原来的单元释放掉。(但是所谓的释放单元,仅仅是想原来单元中的数据清空,相应的内存单元还是存在的)优点:支持随机访问,所以查询效率高。缺点:当向其分非尾插入元素时,因内存单元需要移动数据元素,所以插入的效率比较低。适用场景:适用于对象简单,变化较小,并且频繁随机访问的场景。
2.list容器 list容器在内存中的结构是类似双向链表结构,每个元素的内存单元结构是不连续的,彼此之间通存储相关的地址进行关联。由于在内存中的单元不是连续的,所以其比支持随机访问,不具备[]操作运算。每一个节点都有三个域,前驱节点指针域,数据域,后驱节点指针域。有点:因为只类似链表结构在内存中,所以任意位置删除节点和插入节点都是高效的。缺点:因为内存单元不连续,所以不支持随机访问操作。适用场景:对象变化大,并且对象数量变化频繁,删除和插入操作的情况。
3.map容器map容器是一个关联式容器。在其内部元素的存储结构是通过key-value结构进行存储,并且其key是唯一存在的。支持那种一对一的数据处理过程。其底层是通过rbtree来实现的,利用红黑树的一种严格的平衡二叉树结构实现。在其实现过程,自动创建key-value的插入数据的过程。并且支持快速的查找,通过键值可进行快速的查找对应的数据元素。以及快速删除操作。