面试中常被问到(八)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标准库容器分类相关推荐
- Python培训常识:Python面试中常被问到的几种设计模式要知道
学习Python技术大家都是为了日后能够找到适合自己的工作岗位,那么除了要学习好Python技术外,对于面试环节的问题也要有所了解,本期小编为大家介绍的Python培训教程就算关于Python面试中常 ...
- 面试中常被问到(11)虚函数/纯虚函数
虚函数 如何定义一个虚函数?在基类成员函数前加入virtual关键字,但并不代表此函数不被实现,只是说明允许基类指针调用派生类重写的此函数 一个类只要声明有虚函数或者从基类继承了虚函数,在编译过程中就 ...
- STL标准库-容器-set与map
STL标准库-容器-set与multiset C++的set https://www.cnblogs.com/LearningTheLoad/p/7456024.html STL标准库-容器-map和 ...
- e - 数据结构实验之查找五:平方之哈希表_面试中常被问到的Hash表,你了解吗
#新人扶持计划# Hash表在面试中经常被问到,今天我们来了解下. Hash表也称散列表,也有直接译作哈希表,Hash表是一种特殊的数据结构,它同数组.链表以及二叉排序树等相比较有很明显的区别,它能够 ...
- 面试中常被问到(五)C++析构函数,虚析构函数
C++析构函数 (1)对于析构函数:析构函数与构造函数相呼应,从调用构造函数开始到自动执行析构函数二者调用期间即为所创建对象实例的生命周期. (2)析构函数与类名相同,仅前面加一个~,一般析构函数无参 ...
- 面试中常被问到(三)c/c++区别
c/c++区别 c是面向过程的语言,c++是面向对象的语言,现如今都采用面向对象(oop)编程技术,为什么oop语言如此热门呢? 比如像c++语言中,有封装(类及对象),继承和多态机制,此外c++还支 ...
- 面试中常被问到(九)STL迭代器失效问题
STL容器中迭代器失效的场景: 以vector为例进行分析 vector进行数据插入 如果空间充足那组,插入数据后,原有数据向后移动,导致迭代器失效 如果空间不足,插入新数据需要扩容,则发生拷贝,导致 ...
- Linux运维面试中常被问到的两个shell脚本
脚本一: 在公司里有一个网段是 192.168.3.0的网段,现在想判断一下哪些主机在线,哪些主机不在线. shell脚本解决方案: 方法一: 思路 首先要循环目标主机的IP地址,IP地址分为两部分: ...
- 面试:整理面试中常被问到的8种数据结构
数据结构是一种特殊的组织和存储数据的方式,可以使我们可以更高效地对存储的数据执行操作.数据结构在计算机科学和软件工程领域具有广泛而多样的用途. 几乎所有已开发的程序或软件系统都使用数据结构.此外,数据 ...
最新文章
- pb retrieve时停止工作_电机没有抱闸如何利用变频器实现减速停止
- 【POJ - 3125 】Printer Queue(模拟,队列+优先队列,STL)
- linux CPU、内存、I/O、磁盘等监控统一解决方案
- oracle job有定时执行的功能,可以在指定的时间点或每天的某个时间点自行执行任务。...
- Flutter基础—第一个Flutter实例
- Android UI开发第三十九篇——Tab界面实现汇总及比较
- 将c语言编译成verilog,是否可以将System Verilog函数编译为C或C?
- Android自定义gif进度条,Android自定义view-圆形百分比进度条效果
- 《App后台开发运维和架构实践》推荐序
- idv和vdi的优劣势_VDI和IDV两种桌面虚拟化的方案对比
- Qt多功能计算器(一)——基本功能
- 【华为OD机试真题 JS】跳格子游戏
- easyUI之增加删除与批量删除
- excel VBA自动化 - IF条件语句和FOR循环语句应用
- SpringBoot项目打包发布
- linker与loader,x86与单片机
- 5G+MEC助力,南瑞信通九州云联合打造智能电网5G实验室
- 2022-2027年中国导航电子地图行业市场深度分析及投资战略规划报告
- 迅雷亮相1024程序员节,区块链创新技术破解监管和隐私保护两难困境
- Project项目信息的日程排定方法区别
热门文章
- 卖车卖得好,不如“铁三角”敲得好,智能硬件知多少?
- 大脚插件技能栏美化_血条也性感:TidyPlates姓名板美化增强插件
- 锦标赛算法c语言,多目标遗传算法 ------ NSGA-II (部分源码解析) 交叉操作 crossover.c(示例代码)...
- 蔚来通过聆讯:拟3月10日港交所上市 继续PK小鹏理想
- 了解 CSS 网格:网格模板区域
- 我的手机由我来做主,什么样的APP值得装
- 写给一个外汇女交易员的信(连载四)
- 支付宝首席架构师程立:做架构就像造房打地基
- weblogic漏洞打补丁,安装OPatch补丁
- FS2111单节1.5V干电池升压芯片3.3V的常用升压IC