C++语言相关的常见面试题目(二)

1.vector底层实现原理

以下是 std::vector 的一般底层实现原理:

内存分配:当创建一个 std::vector 对象时,会分配一块初始大小的连续内存空间来存储元素。这个大小通常会随着 push_back() 操作而动态增加。

容量和大小:std::vector 有两个重要的成员变量:容量(capacity)和大小(size)。容量指向当前已分配内存空间的大小,而大小则表示当前 std::vector 中元素的数量。

元素访问:通过使用指针进行偏移来访问数组中的元素。因为 std::vector 是一个线性连续结构,在使用迭代器或下标访问时可以直接计算偏移地址。

动态扩展:当向 std::vector 添加新元素时,如果当前容量不足以容纳新元素,就需要重新分配更大的内存空间,并将原始数据拷贝到新地址上去。这可能导致数据复制开销较大。

push_back(const T& value):向 vector 尾部添加一个元素。pop_back():删除 vector 尾部的一个元素。size():返回当前 vector 中元素的个数。capacity():返回当前 vector 的容量(即分配了多少内存空间)。resize(size_type n, const T& val = T()):改变 vector 的大小,并且可以指定新添加元素的默认值。clear():清空 vector 中所有元素,使其大小变为 0。empty():判断 vector 是否为空,如果为空则返回 true,否则返回 false。迭代器相关方法:begin() 和 end(): 返回指向第一个和最后一个元素之后位置(尾部)的迭代器。
可以使用迭代器遍历并访问 vector 中的所有元素。
下标操作符重载[]: 通过下标访问特定位置上的元素。

2. vector的内存增长机制

省流:内存只增加不减少,gcc每次增长会翻倍,vs会增加0.5倍 

3. vector中reserve和resize的区别

省流:省不了一点

4. vector为什么不能存储引用?

引用是别名,不是对象,没有实际地址,不能定义引用的指针,也不能定义引用的引用

这是一条吃饭博客,由挨踢零声赞助。学C/C++就找挨踢零声,加入挨踢零声,面试不挨踢!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/41281.shtml

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

相关文章

element-plus 的form表单组件之el-radio(单选按钮组件)

单选按钮组件适用于同一组类型的选项只能互斥选择的场景,就是支持单选。单选组件包含以下3个组件 组件名作用el-radio-group单选组组件,子元素可以是el-radio或el-radio-button,v-mode绑定单选组的响应式属性el-radio单选组件,la…

阶段三:项目开发---搭建项目前后端系统基础架构:任务9:导入空管基础数据

任务描述 本阶段任务是导入项目的基础数据,包括空管基础数据和离线的实时飞行数据(已经脱敏)。 任务指导 本阶段任务需要导入两种数据: 1、在MySQL中导入空管基础数据 kongguan.sql空管基础数据表说明: 1告警信息…

OpenCV直方图计算函数calcHist的使用

操作系统:ubuntu22.04OpenCV版本:OpenCV4.9IDE:Visual Studio Code编程语言:C11 功能描述 图像的直方图是一种统计表示方法,用于展示图像中不同像素强度(通常是灰度值或色彩强度)出现的频率分布。具体来说…

对MsgPack与JSON进行序列化的效率比较

序列化是将对象转换为字节流的过程,以便在内存或磁盘上存储。常见的序列化方法包括MsgPack和JSON。以下将详细探讨MsgPack和JSON在序列化效率方面的差异。 1. MsgPack的效率: 优点: 高压缩率: MsgPack采用高效的二进制编码格式&…

Embedding理解

一、概念 Embedding 可以理解为一种将概念、物体或信息转换为数字序列的数值表示方法。它是沟通两个不同世界或领域的桥梁,能够把各种类型的数据(如文本、图像、视频等)映射到一个向量空间中。 在这个向量空间里,相似的项目(例如语义上相近的单词、相似的图像或相关的视…

cs231n作业1——SVM

参考文章:cs231n assignment1——SVM SVM 训练阶段,我们的目的是为了得到合适的 𝑊 和 𝑏 ,为实现这一目的,我们需要引进损失函数,然后再通过梯度下降来训练模型。 def svm_loss_naive(W, …

【Qt】Qt概述

目录 一. 什么是Qt 二. Qt的优势 三. Qt的应用场景 四. Qt行业发展方向 一. 什么是Qt Qt是一个跨平台的C图形用户界面应用程序框架,为应用程序开发者提供了建立艺术级图形界面所需的所有功能。 Qt是完全面向对象的,很容易扩展,同时Qt为开发…

从打印到监测:纳米生物墨水助力3D生物打印与组织监测平台?

从打印到监测:纳米生物墨水助力3D生物打印与组织监测平台? 在 3D 组织工程中,纳米生物墨水是将纳米材料与 ECM 水凝胶结合,以提高其打印性和功能性的重要策略。纳米生物墨水可以增强水凝胶的机械性能、导电性、生物活性&#xff…

汽车报价资讯app小程序模板源码

蓝色实用的汽车报价,汽车新闻资讯,最新上市汽车资讯类小程序前端模板。包含:选车、资讯列表、榜单、我的主页、报价详情、资讯详情、询底价、登录、注册、车贷,油耗、意见反馈、关于我们等等。这是一款非常全的汽车报价小程序模板…

MNIST 数据集 ubyte 格式介绍

train-images-idx1-ubyte 文件是用于存储 MNIST 数据集中手写数字图像数据的文件。与标签文件类似,这个文件使用的是一种简单而紧凑的二进制格式。具体的文件格式如下: 文件头(Header): 文件头部分包含了一些描述文件内…

Ubuntu 20版本安装Redis教程,以及登陆

第一步 切换到root用户,使用su命令,进行切换。 输入: su - 第二步 使用apt命令来搜索redis的软件包,输入命令:apt search redis 第三步 选择需要的redis版本进行安装,本次选择默认版本,redis5.…

Emacs 的优点及与 DE 的比较

一、引言 在编程领域,对于工具的选择一直是开发者们热议的话题。今天,我们来探讨一下 Emacs 及其所具有的优点,并思考使用 Emacs 写程序是否真的比使用集成开发环境(IDE)更方便。 二、Emacs 的优点 高度可定制性 可以…

mac如何安装nvm

​ vue项目开发,热更新,webpack,前辈造的轮子:各类的工具,库,像axios,qs,cookie等轮子在npm上可以拿来直接用,需要node作为环境支撑。 开发时同时有好几个项目,每个项目的需求不同…

Tornado:高性能异步Web框架详解

文章目录 引言官网链接Tornado 原理1. 非阻塞I/O2. 异步编程3. 事件循环4. 轻量级 使用方法安装Tornado创建一个简单的Web服务器 优缺点优点缺点 结论 引言 在Web开发的广阔领域中,处理高并发和实时性需求一直是开发者们面临的挑战。Tornado,作为一个由…

威纶通创建项目创建(输入,输出,画面切换使用)

创建一个项目 1,打开软件 2,创建项目,设置系统参数 增加设备,选择好对应型号(有市面上80%设备) 3,修改页面,选择参数 4,创建新页面 不能在已经编辑的页面进行新增 5&a…

【HTML入门】第三课 - 标题、段落、空格

这一小节,我们说一些比较零散的知识,HTML课程中呢,其实就是一些标签,正是这些标签组成了前端网页的各种元素,所以你也可以叫他们标签元素。 像前两节我们说的,html head body title meta style 。这些都是…

【考研】南邮历年复试上机试题目与题解

【考研】南邮历年复试上机试题目与题解 文章目录 【考研】南邮历年复试上机试题目与题解个人题目难度评估历年上机题目PROB1002 求最值问题PROB1003 新对称素数问题PROB1004 进制转换PROB1005 涂色问题 (待补)PROB1006 最大公约数和最小公倍数PROB1007 斐波那契数列PROB1008 回…

解决Spring Boot中的数据库连接池问题

解决Spring Boot中的数据库连接池问题 大家好,我是微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 1. 理解数据库连接池的重要性 数据库连接池在任何使用数据库的应用程序中都起着至关重要的作用。它们管理和维…

解析Java中的动态代理与静态代理的区别

解析Java中的动态代理与静态代理的区别 大家好,我是微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 1. 引言 代理模式是软件开发中常用的一种设计模式,用于控制对其它对象的访问。在Java中&#xf…

C#中的Task.Delay(2000).Wait() 与await Task.Delay(2000)

Task.Delay(2000).Wait() 和 await Task.Delay(2000) 在功能上看似相似,都用于等待一段时间(在这个例子中是2000毫秒),但它们在使用方式和背后的行为上存在一些关键差异。 .Result 是 Task 类的一个属性,它用于获取任务…