文章目录

  • 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相关推荐

  1. 面试准备每日五题:C++(八)——重写重载隐藏、vector相关

    文章目录 1. 重写.重载和隐藏 2. 链表和数组有什么区别 3. vector的底层原理 4. vector的reserve和resize 5.vector迭代器失效的情况 1. 重写.重载和隐藏 ...

  2. 面试准备每日五题:C++(二)——mallocnew、宏、volatile、constvolatile、(a)和(a)

    文章目录 1.C语言的 malloc 和 C++ 中的 new 有什么区别 2. 写一个 "标准"宏MIN 3. 介绍 volatile 及其作用 4. 一个参数可以既是const ...

  3. 面试准备每日五题:C++(十)——mapset、set查找、迭代器实现、set低层原理

    文章目录 1. 为何map和set的插入删除效率比其他序列容器高,为何map和set每次Insert之后,以前保存的iterator不会失效? 2. 当数据元素增多时(从10000到20000),ma ...

  4. 面试准备每日五题:C++(七)——左值右值、面向对象、四种cast转换、拷贝构造函数赋值、虚函数多态

    文章目录 一. 什么是右值引用,跟左值又有什么区别? 二. 面向对象的三大特征 三. c++中四种cast转换 四.拷贝构造函数和赋值运算符的认识 五. 对虚函数和多态的理解 一. 什么是右值引用,跟 ...

  5. 面试准备每日五题:C++(六)——CC++、staticconstextern、sizeof strlen、指针引用、数组指针指针数组函数指针

    文章目录 一.C和C++的区别是什么? 二.关键字static.const.extern作用 三.sizeof和strlen的区别 四.指针和引用的区别 五 .指针数组.数组指针.函数指针 一.C和C ...

  6. 面试准备每日五题:C++(四)——typedefdefine、指针常量、队列栈、地址赋值、C和C++结构体

    文章目录 1. typedef 和define 有什么区别 2. 指针常量与常量指针区别 3. 简述队列和栈的异同 4. 设置地址为0x67a9 的整型变量的值为0xaa66 5.C语言的结构体和C+ ...

  7. 面试准备每日五题:C++(五)——野指针、句柄指针、newdeletemallocfree、extern、类成员权限

    文章目录 1. 如何避免"野指针" 2. 句柄和指针的区别和联系是什么? 3. new/delete与malloc/free的区别是什么 4. 说一说extern"C&q ...

  8. 面试准备每日五题:C++(三)——全局局部变量、内存分配、strcpysprintfmemcpy、函数指针、引用

    文章目录 1. 全局变量和局部变量有什么区别?是怎么实现的?操作系统和编译器是怎么知道的? 2. 简述C.C++程序编译的内存分配情况 3. 简述strcpy.sprintf 与memcpy 的区别 ...

  9. 面试准备每日五题:C++(一)——变量定义声明、#ifdef #else、结构体赋值、sizeof strlen、C和C++的static

    文章目录 1 变量的声明和定义有什么区别? 2 简述#ifdef.#else.#endif和#ifndef的作用 3 结构体可以直接赋值吗? 4 sizeof 和strlen 的区别 5 C 语言的关 ...

最新文章

  1. 只看到了别人28岁退休,背后的期权知识你知道吗?
  2. docker 建mysql
  3. R语言读取出现 列的数目比列的名字要多的解决方法
  4. automybatis mysql_mybatis-plus:使用Mybatis-AutoGenerator代码生成器(1)
  5. a卡显存测试软件_官方游戏性能堪比RTX 3080 苏姿丰:RX 6000 Big Navi是史上最强A卡...
  6. m6000路由器产品介绍与基本操作_交换机与路由器的区别及光模块搭配方案_光模块吧...
  7. 通达信服务器维修点查询,通达信验证服务器数据库修改
  8. 用Visual C++实现远程线程嵌入技术
  9. 原生JS、jQuery 遍历方法总结
  10. 百度万人协同规模下的代码管理架构演进
  11. @Controller @ResponseBody @RestController的基本含义与使用方法
  12. 【算法学习笔记】81.动态规划 分类讨论 SJTU OJ 1075 括号匹配升级
  13. 用reloadRowsAtIndexPaths刷新单个cell 跳动问题
  14. Microsoft SQL Server 自定义函数整理大全
  15. c语言日历程序实验报告,万年历实验报告.doc
  16. 总线型,星型,环状,树形,网状拓扑结构
  17. word中公式和文字不在一行的设置方法
  18. 迅镭激光打标机3mm激光深度高精度打标工艺-激光雕刻
  19. TeamTalk Netlib详解
  20. Vue入门(安装配置启动项目)

热门文章

  1. 【技术翻译】SIFT算子原理及其实现 (一)介绍
  2. Light OJ 1078
  3. 什么是软件测试中的黑天鹅
  4. ubuntu命令查询版本和内核版本
  5. 大道至简 爱上Metro
  6. 仿QQ聊天室【方案】
  7. X5档案-参加业务架构平台研讨会后记
  8. Linux部署Java环境
  9. 创建控制文件后的疑难解答
  10. 【Netty】EventLoop和线程模型