面试中常被问到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,对此需要多次旋转,效率也不高

但红黑树通过节点颜色加以限制:

  1. 每个节点要么红,要么黑
  2. 根结点必须黑
  3. 每个叶节点,即空节点为黑
  4. 如果一个节点为红,两个子节点都为黑
  5. 对每个节点,从该节点到其子孙节点的所有路径上包含相同数目的黑节点

对于红黑树而言,也需要通过旋转来调节,但旋转次数较AVL树少,效率较高,时间复杂度均为O(log2n)

  • 容器适配器:

stack:栈,底层默认依赖deque容器实现先进后出,后进先出的结构

queue:队列,底层默认依赖deque容器实现先进先出,后进后出的结构

priority_queue:优先级队列,底层默认依赖vector实现一个大根堆,值越大,优先级越高,先出,对此求前top_max 优先采用此结构

以上是关于面试中常被问到STL标准库容器分类的主要内容,如果未能解决你的问题,请参考以下文章

面试中常被问到new/delete和malloc/free区别

超详细STL之基于源码剖析vector实现原理及注意事项

超详细STL之基于源码剖析vector实现原理及注意事项

STL标准库 & 范型编程学习笔记:容器的结构分类测试

STL标准库 & 范型编程学习笔记:容器的结构分类测试

C++标准库 STL -- 容器源码探索