当前位置: 首页 > news >正文

【C++ 高频面试题】STL 你了解多少呢?vector 的底层实现原理

文章目录

      • 1. 常见的 STL 容器
      • 2.vector 和 list 的区别
      • 3. vector 的底层原理
      • 4. push_back() 和 emplace_back() 区别

1. 常见的 STL 容器

  • 🍎①序列容器
    vector(向量):是一个动态数组实现,提供高效的随机访问和在尾部进行插入/删除操作。
    list(链表):是一个双向链表实现,支持在==任意位置进行插入/删除操作,但不支持随机访问。
    在这里插入图片描述

  • 🍎②关联容器
    set(集合):是一个有序的集合,不允许重复元素,支持快速查找、插入、删除。
    在这里插入图片描述

  • 🍎③容器适配器
    stack(栈):是一个基于底层容器的栈实现,满足后进先出的规则。
    queue(队列):是一个基于底层容器队列的实现,满足先进先出的规则。


2.vector 和 list 的区别

  • 🍎vector底层实现是数组,list底层是双向链表
  • 🍎vector是顺序存储,支持随机访问,list不行。
  • 🍎vector 随机访问性好,插入和删除的效率较低;list不支持随机访问,插入和删除效率较高。
  • 🍎vector在中间节点进行插入删除会导致内存拷贝,list不会
  • 🍎vector一次性分配好内存,不够时才进行翻倍扩容list每次插入新的节点都会进行内存申请

3. vector 的底层原理

vector在堆中分配了一段连续的内存空间来存放元素。
三个迭代器
(1)first:对象的起始字节位置
(2)last:指向当前最后一个元素的末尾字节
(3)end:指向整个vector容器所占用内存空间的末尾字节

4. push_back() 和 emplace_back() 区别

  • 🐧push_back用于在容器的尾部添加一个元素
container.push_back(value);

container是一个支持push_back操作的容器,例如:std::vector、std::list等,而value是要添加的元素的值。

  • 🐧emplace_back用于在容器的尾部直接构造一个元素
container.emplace_back(value);

其中 container 是⼀个⽀持 emplace_back 操作的容器,⽽ args 是传递给元素类型的构造函数的参数。
push_back 不同的是, emplace_back 不需要创建临时对象,⽽是直接在容器中构造新的元素。


🍎两者的区别
push_back接受一个已存在的对象或一个可转换为容器元素类型的对象,并将其复制或移动到容器中。emplace_back直接在容器中构造元素,不需要创建临时对象

emplace_back通常比push_back更高效,因为它避免了创建和销毁临时对象的开销。

emplace_back的参数是传递给元素类型的构造函数的参数,而push_back直接接受一个元素。


http://www.mrgr.cn/news/26102.html

相关文章:

  • CloudFlare问题与CDN问题
  • 摊牌了!一文教会你轻松上手豆包MarsCode 编程助手!
  • 【生产力必备工具】GPU加速计算的首选云服务——蓝耘GPU(点击我的链接注册登录,可获50使用卷)
  • 软件设计基础知识(6)
  • ELK在Linux服务器下使用docker快速部署(超详细)
  • 苍穹外卖学习笔记(五)
  • 在项目管理这个行业里,PM都有啥高含金量的证书可以考?
  • Java语法1
  • 初识c++:入门基础
  • java重点学习-线程的并发安全(1)
  • 绝佳的知乎展示形式,助力品牌信息全面曝光
  • DAPIER™(大片儿),一款专业的计算机艺术软件,一键式计算机艺术品快速智能(非AI)生成程序
  • 98、RS485全自动收发电路入坑笔记
  • 桥接网络设置多用户lxd容器
  • .SUFFIXES:
  • 查询数据起始时间判断
  • Vue实用操作-2-如何使用网页开发者工具
  • 网页上的文件我不想下载只想看,一个插件满足你(所有文件)
  • leetcode 2398.预算内的最多机器人数目
  • Ready Go