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

news2025/1/11 2:40:04

文章目录

      • 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.coloradmin.cn/o/2131579.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于R语言结构方程模型分析与实践技术应用

结构方程模型(Sructural Equation Model)是一种建立、估计和检验研究系统中多变量间因果关系的模型方法,它可以替代多元回归、因子分析、协方差分析等方法,利用图形化模型方式清晰展示研究系统中变量间的因果网络关系,…

信息安全数学基础(9)素数的算数基本定理

前言 在信息安全数学基础中,素数的算数基本定理(也称为唯一分解定理或算术基本定理)是一个极其重要的定理,它描述了正整数如何唯一地分解为素数的乘积。这个定理不仅是数论的基础,也是许多密码学算法(如RSA…

【算法专场】分治(上)

目录 前言 什么是分治? 75. 颜色分类 算法分析 算法步骤 算法代码 912. 排序数组 - 力扣(LeetCode) 算法分析 算法步骤 算法代码 215. 数组中的第K个最大元素 - 力扣(LeetCode) 算法分析 算法步骤 ​编辑…

【Redis入门到精通一】什么是Redis?

目录 Redis 1. Redis的背景知识 2.Redis特性 3.Redis的使用场景 4.Ubuntu上安装配置Redis Redis Redis在当今编程技术中的地位可以说非常重要,大多数互联网公司内部都在使用这个技术,熟练使用Redis已经成为开发人员的一个必备技能。本章将带领读者…

yolov5实战全部流程

本科生阶段除了在中等以上的985和某些特定的CS强项院校,无意愿研究生学习的本科生是不建议学习人工智能这一专业的,保研学生也许可以在实验室打工推荐信学习接触到此类事件,此项blog主要是对yolov5的实践性项目,yolov5作为最具有代…

python 函数 封装

封装 函数的参数是:变量 def 函数(参数):print(参数)if __name__ __main__:函数(参数)函数(参数2)函数的参数是: 字典 import requests# 定义一个字典 data {} 地址 "https://webdriveruniversity.com/" 请求方法 getdata["url"…

【数据结构】选择题错题集

这里注意原本p后面也是有节点的。 这里只有遍历前面的链表找到尾节点连接即可。 快排是交换排序。 不要想象只有这两个节点,还有其他节点省略了。 筛选法就是向下调整算法。用向下调整建堆从最后一个节点的父亲开始。 这里错位相减法是乘4,所以最后要除三…

超详细!外婆都能看懂的Stable Diffusion入门教程,AI绘画SD零基础入门到精通教程!

一、前言 如今的AI绘画界有两大最强工具,一个是Midjourney ,一个是StableDiffusion。Midjourney生成图片的质量非常高,可问题就是 Midjourney 的图片怎么精准的控制,或者是不改变某个物体的情况下更换背景等等,实在是…

虚拟化数据恢复—断电导致虚拟机目录项被破坏的数据恢复案例

虚拟化数据恢复环境: 某品牌服务器(部署VMware EXSI虚拟机)同品牌存储(存放虚拟机文件)。 虚拟化故障: 意外断电导致服务器上某台虚拟机无法正常启动。查看虚拟机配置文件发现这台故障虚拟机除了磁盘文件以…

视频监控平台是如何运作的?EasyCVR视频汇聚平台的高效策略与实践

随着科技的飞速发展,视频监控平台在社会安全、企业管理、智慧城市构建等领域发挥着越来越重要的作用。一个高效的视频监控平台,不仅依赖于先进的硬件设备,更离不开强大的视频处理技术作为支撑。这些平台集成了多种先进的视频技术,…

长短期记忆网络和UKF的结合|Python代码例程

结合长短期记忆网络(LSTM)和无迹卡尔曼滤波器(UKF)的技术在机器人导航和状态估计中具有广泛的应用前景。 文章目录 结合LSTM和UKF的背景结合LSTM和UKF的优势应用实例研究现状Python代码示例结合LSTM和UKF的背景 长短期记忆网络(LSTM)是一种特殊的递归神经网络(RNN),…

51单片机-IIC实验1-AT24C02数据存储(实战1)

本实验主要是针对IIC的具体案例进行实战,主要利用支持IIC通信的芯片AT24C02进行与51单片机构成通信。51(AT89C52)本身不带有IIC通信,所以,我们需要给51写一个IIC时序,以便与支持IIC协议的AT24C02数据存储芯…

逆向学习系列(三)Charles配合Drony的使用(真机)

在抓包中,有时可能出现无法抓包的情况,这时,可以尝试使用Drony转发抓包。 一、安装Drony 将电脑上的Drony_1.3.154_APKPure.apk复制粘贴进真机的Download文件夹中。在真机上找到这个apk,点击安装。 二、在VMOS中安装Drony 在真…

【Petri网导论学习笔记】Petri网导论入门学习(四)

Petri网导论入门学习(四) Petri 网导论学习笔记(4)1.2 标识网与网系统定义 1.8定义 1.9例 1.4存在空标识网的几种情况1.2 小结1.2学习完应达到的要求 Petri 网导论学习笔记(4) 如需学习转载请注明原作者并附…

55页可编辑PPT | 集团制造企业数字化转型顶层设计方案

这份PPT文档是一份关于集团制造企业数字化转型的顶层业务设计方案。文档详细介绍了企业在后ERP时代面临的挑战,以及如何通过Oracle解决方案来实现数字化转型。 数字化转型的三大要点集中在满足利益相关者的期望,以企业价值为核心引领业务模式的创新&…

DHCP协议原理大全与全局地址、接口地址池、中继代理三种方式配置

DHCP协议原理与配置 1.DHCP动态主机配置协议 原理:通过配置DHCP服务器给主机自动分配IP地址; 优点;1)可以动态学习或者获取IP地址及网络参数; 2)减少人工配置数量 3)减少ip抵制冲突; 4)采用客户端/服务器通信模式,报文基于UDP,服务器端端口号67。客户端端口号68…

AS608指纹识别模块(上位机操作)

目录 一、介绍 二、传感器原理 1.原理图 2.引脚描述 3.工作原理:模块指令格式 4.工作原理:模块应答格式 5.工作原理步骤 三、程序设计 四、实验效果 五、资料获取 项目分享 一、介绍 AS608模块采用了国内著名指纹识别芯片公司杭州晟元芯片技…

灵活连接,无限可能—探索EtherCAT的拓扑艺术

EtherCAT技术具备快速响应和高效率的特点,在工业自动化领域显得至关重要,其灵活的拓扑结构是其核心优势,支持多样化的网络布局,无需交换机或集线器,简化布线,降低成本,提高系统可靠性和灵活性。…

【AI大模型】ChatGPT模型原理介绍(上)

目录 🍔 什么是ChatGPT? 🍔 GPT-1介绍 2.1 GPT-1模型架构 2.2 GPT-1训练过程 2.2.1 无监督的预训练语言模型 2.2.2 有监督的下游任务fine-tunning 2.2.3 整体训练过程架构图 2.3 GPT-1数据集 2.4 GPT-1模型的特点 2.5 GPT-1模型总结…

2024年PMP我可以自学通过考试吗?

作为PMP考试的老考生,我想提醒一下,PMP考试费用很高,初次考试费用为3900元(重考费用为2500元)。如果你想自学PMP,一定要三思而后行。首先要问问自己是否符合以下几种情况: 1. 有相关的工作经验…