面试准备每日五题:C++(九)——vector、list、deque、priority_queue、mapset
文章目录
- 1. 正确释放vector的内存(clear(), swap(), shrink_to_fit())
- 2. list的底层原理
- 3. 什么情况下用vector,什么情况下用list,什么情况下用deque
- 4. priority_queue的底层原理
- 5. map 、set、multiset、multimap的底层原理
1. 正确释放vector的内存(clear(), swap(), shrink_to_fit())
- vec.clear():清空内容,但是不释放内存。
- vector().swap(vec):清空内容,且释放内存,想得到一个全新的vector。
- vec.shrink_to_fit():请求容器降低其capacity和size匹配。
- vec.clear();vec.shrink_to_fit();:清空内容,且释放内存。
2. list的底层原理
- list的底层是一个双向链表,使用链表存储数据,并不会将它们存储到一整块连续的内存空间中。恰恰相反,各元素占用的存储空间(又称为节点)是独立的、分散的,它们之间的线性关系通过指针来维持,每次插入或删除一个元素,就配置或释放一个元素空间;
- list不支持随机存取,如果需要大量的插入和删除,而不关心随即存取;
3. 什么情况下用vector,什么情况下用list,什么情况下用deque
- vector可以随机存储元素(即可以通过公式直接计算出元素地址,而不需要挨个查找),但在非尾部插入删除数据时,效率很低,适合对象简单,对象数量变化不大,随机访问频繁。除非必要,我们尽可能选择使用vector而非deque,因为deque的迭代器比vector迭代器复杂很多;
- list不支持随机存储,适用于对象大,对象数量变化频繁,插入和删除频繁,比如写多读少的场景。
- 需要从首尾两端进行插入或删除操作的时候需要选择deque。
4. priority_queue的底层原理
priority_queue:优先队列,其底层是用堆来实现的。在优先队列中,队首元素一定是当前队列中优先级最高的那一个;
5. map 、set、multiset、multimap的底层原理
m a p 、 s e t 、 m u l t i s e t 、 m u l t i m a p 的 底 层 实 现 都 是 红 黑 树 , e p o l l 模 型 的 底 层 数 据 结 构 也 是 红 黑 树 , l i n u x 系 统 中 C F S 进 程 调 度 算 法 , 也 用 到 红 黑 树 。
红 黑 树 的 特 性 :
- 每个结点或是红色或是黑色;
- 根结点是黑色;
- 每个叶结点是黑的;
- 如果一个结点是红的,则它的两个儿子均是黑色;
- 每个结点到其子孙结点的所有路径上包含相同数目的黑色结点;
面试准备每日五题:C++(九)——vector、list、deque、priority_queue、mapset相关推荐
- 面试准备每日五题:C++(八)——重写重载隐藏、vector相关
文章目录 1. 重写.重载和隐藏 2. 链表和数组有什么区别 3. vector的底层原理 4. vector的reserve和resize 5.vector迭代器失效的情况 1. 重写.重载和隐藏 ...
- 面试准备每日五题:C++(二)——mallocnew、宏、volatile、constvolatile、(a)和(a)
文章目录 1.C语言的 malloc 和 C++ 中的 new 有什么区别 2. 写一个 "标准"宏MIN 3. 介绍 volatile 及其作用 4. 一个参数可以既是const ...
- 面试准备每日五题:C++(十)——mapset、set查找、迭代器实现、set低层原理
文章目录 1. 为何map和set的插入删除效率比其他序列容器高,为何map和set每次Insert之后,以前保存的iterator不会失效? 2. 当数据元素增多时(从10000到20000),ma ...
- 面试准备每日五题:C++(七)——左值右值、面向对象、四种cast转换、拷贝构造函数赋值、虚函数多态
文章目录 一. 什么是右值引用,跟左值又有什么区别? 二. 面向对象的三大特征 三. c++中四种cast转换 四.拷贝构造函数和赋值运算符的认识 五. 对虚函数和多态的理解 一. 什么是右值引用,跟 ...
- 面试准备每日五题:C++(六)——CC++、staticconstextern、sizeof strlen、指针引用、数组指针指针数组函数指针
文章目录 一.C和C++的区别是什么? 二.关键字static.const.extern作用 三.sizeof和strlen的区别 四.指针和引用的区别 五 .指针数组.数组指针.函数指针 一.C和C ...
- 面试准备每日五题:C++(四)——typedefdefine、指针常量、队列栈、地址赋值、C和C++结构体
文章目录 1. typedef 和define 有什么区别 2. 指针常量与常量指针区别 3. 简述队列和栈的异同 4. 设置地址为0x67a9 的整型变量的值为0xaa66 5.C语言的结构体和C+ ...
- 面试准备每日五题:C++(五)——野指针、句柄指针、newdeletemallocfree、extern、类成员权限
文章目录 1. 如何避免"野指针" 2. 句柄和指针的区别和联系是什么? 3. new/delete与malloc/free的区别是什么 4. 说一说extern"C&q ...
- 面试准备每日五题:C++(三)——全局局部变量、内存分配、strcpysprintfmemcpy、函数指针、引用
文章目录 1. 全局变量和局部变量有什么区别?是怎么实现的?操作系统和编译器是怎么知道的? 2. 简述C.C++程序编译的内存分配情况 3. 简述strcpy.sprintf 与memcpy 的区别 ...
- 面试准备每日五题:C++(一)——变量定义声明、#ifdef #else、结构体赋值、sizeof strlen、C和C++的static
文章目录 1 变量的声明和定义有什么区别? 2 简述#ifdef.#else.#endif和#ifndef的作用 3 结构体可以直接赋值吗? 4 sizeof 和strlen 的区别 5 C 语言的关 ...
最新文章
- 只看到了别人28岁退休,背后的期权知识你知道吗?
- docker 建mysql
- R语言读取出现 列的数目比列的名字要多的解决方法
- automybatis mysql_mybatis-plus:使用Mybatis-AutoGenerator代码生成器(1)
- a卡显存测试软件_官方游戏性能堪比RTX 3080 苏姿丰:RX 6000 Big Navi是史上最强A卡...
- m6000路由器产品介绍与基本操作_交换机与路由器的区别及光模块搭配方案_光模块吧...
- 通达信服务器维修点查询,通达信验证服务器数据库修改
- 用Visual C++实现远程线程嵌入技术
- 原生JS、jQuery 遍历方法总结
- 百度万人协同规模下的代码管理架构演进
- @Controller @ResponseBody @RestController的基本含义与使用方法
- 【算法学习笔记】81.动态规划 分类讨论 SJTU OJ 1075 括号匹配升级
- 用reloadRowsAtIndexPaths刷新单个cell 跳动问题
- Microsoft SQL Server 自定义函数整理大全
- c语言日历程序实验报告,万年历实验报告.doc
- 总线型,星型,环状,树形,网状拓扑结构
- word中公式和文字不在一行的设置方法
- 迅镭激光打标机3mm激光深度高精度打标工艺-激光雕刻
- TeamTalk Netlib详解
- Vue入门(安装配置启动项目)