面试中常被问到STL标准库容器分类
Posted AllenSquirrel
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试中常被问到STL标准库容器分类相关的知识,希望对你有一定的参考价值。
目录
-
顺序容器
vector:
向量容器,类似于数组功能,但比数组更灵活,底层是动态开辟的一维数组,内存可自增,每次默认增值2倍
vector内存绝对连续,适合随机访问和末尾增加删除的操作,时间复杂度均为O(1)
deque:
双端队列容器,底层实现是动态开辟的二维数组,第一维默认2倍扩容,第二维是固定大小的数组,一维存储指针,指向动态开辟的二维数组,内存整体不连续,分段连续。deque底层数据结构类似链地址法hash表,但hash表存储链表,deque存储数组
stack和queue依赖deque来实现,首尾增删较多的情况首先选择deque,同时deque二维数组大小事先分配好,可以直接存放数据,初始化效率高,不像vector根据插入元素不断扩充空间
list:
列表容器,底层是带头结点的双向链表容器,除随机访问,其余任意位置的增删操作复杂度均为O(1)
-
关联容器:
set:单重集合(key型)(内部元素无重复)
multiset:多重集合
map:单重映射(key-value键值对)
multimap:多重映射
map和set底层实现均是维护一棵红黑树,红黑树是一棵没有AVL树严格的平衡二叉树,AVL树要求保持左右子树的高度差不能超过1,对此需要多次旋转,效率也不高
但红黑树通过节点颜色加以限制:
- 每个节点要么红,要么黑
- 根结点必须黑
- 每个叶节点,即空节点为黑
- 如果一个节点为红,两个子节点都为黑
- 对每个节点,从该节点到其子孙节点的所有路径上包含相同数目的黑节点
对于红黑树而言,也需要通过旋转来调节,但旋转次数较AVL树少,效率较高,时间复杂度均为O(log2n)
-
容器适配器:
stack:栈,底层默认依赖deque容器实现先进后出,后进先出的结构
queue:队列,底层默认依赖deque容器实现先进先出,后进后出的结构
priority_queue:优先级队列,底层默认依赖vector实现一个大根堆,值越大,优先级越高,先出,对此求前top_max 优先采用此结构
以上是关于面试中常被问到STL标准库容器分类的主要内容,如果未能解决你的问题,请参考以下文章