面试浅谈之 C++ STL 篇

news2024/12/23 16:19:12

面试浅谈之 C++ STL 篇

一 🏠 概述

HELLO,各位博友好,我是阿呆 🙈🙈🙈

这里是面试浅谈系列,收录在专栏面试中 😜😜😜

本系列将记录一些阿呆个人整理的面试题 🏃🏃🏃

OK,兄弟们,废话不多直接开冲 🌞🌞🌞


二 🏠 核心

1、什么是 STL ?

STL (Standard Template Library) 是 C++ 的标准模板库,主要由container(容器)、algorithm(算法)和iterator(迭代器)三大部分构成:

1、容器 :存放数据对象(就是一种数据结构,例链表、栈、队列等等)

2、算法 :操作容器中的数据对象(操作容器数据的模板函数,sort、find、copy、for_each)

3、迭代器 :访问容器中的数据对象(正向,反向,可读)

剩余三大组件是 :仿函数、适配器、空间配置器


2、HashMap 和 Map 适用场景

HashMap 底层实现链式哈希表(无序),查找速度快(常量级)

Map 底层实现是红黑树(有序),查找速度相对慢( log(n) )

在数据量级高且追求查询性能时,使用 HashMap

在数据量级低且要求内存低消耗时,使用 Map


3、STL HashTable 底层实现

开链法 解决 hash 冲突

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zDKNS9gR-1676880997984)(E:\2022年MD文档\2023 年 MD文档\一月\面试浅谈之 C++ STL 篇.assets\1676806462680.png)]


4、Vector 底层原理及相关问题

① vector 底层原理

动态数组,包含三个迭代器,start 和 finish 之间是已被使用的空间范围 ,end_of_storage 是整块连续空间包括备用空间尾部

当空间不够装下数据时,会自动申请更大空间,把原来数据拷贝到新内存空间,释放原空间【扩容】

当释放或者删除数据时,内存空间不释放,仅清空数据

任何 Vector 空间重新配置的操作,指向原 Vector 迭代器会失效


② vector reserve 和 resize 区别

reserve 保证空间大小达到参数指定大小,扩充内存空间,解决多次开辟、释放空间问题

resize 涉及成员对象默认初始化,也会改变内存空间大小


③ vector size 和 capacity 区别

size 表示有多少元素(finish - start)

capacity 表示内存空间可容纳多少元素(end_of_storage - start)


④ vector 元素类型可以是引用吗?

vector 元素类型是对象,引用不是对象,没有实际地址


⑤ vector 迭代器失效情况

① 当插入一个元素后,end 返回迭代器失效

② 当插入一个元素后,造成动态扩容,first 和 end 返回迭代器失效

③ 删除操作 (erase,pop_back) ,指向删除点和后面元素的迭代器失效


⑥ 正确释放 vector 内存

vec.clear() :清空内容,但不释放内存

vector().swap(vec) :清空内容,且释放内存,得到⼀个空 vector

vec.shrink_to_fit() :请求容器降低其 capacity 和 size 匹配

vec.clear(),vec.shrink_to_fit() :清空内容,且释放内存


⑦ vector 扩容为什么 1.5 倍或 2 倍

可能产生堆空间浪费,成倍增长倍数不能太大


⑧ vector 常用函数

vector<int> vec(10,100); //创建10个元素,每个元素值为100
vec.resize(r,vector<int>(c,0)); //⼆维数组初始化
reverse(vec.begin(),vec.end()) //将元素翻转
vec.push_back(val); //尾部插⼊数字
vec.size(); //向量⼤⼩
iterator = vec.erase(iterator) //删除元素

find(vec.begin(),vec.end(),1); //查找元素
sort(vec.begin(),vec.end()); //排序,默认升序排列

5、map [ ] 与 find 区别

[] 作用 :将关键码作为下标执行查找;如果不存在关键码,将⼀个具有该关键码和值类型默认值插入

find 函数:关键码执行查找,找到返回该位置迭代器;不存在这个关键码,返回尾迭代器


6、其它 STL 容器底层实现

参考 C++ 语言专栏中 C++ 浅谈 STL 系列


三 🏠 结语

身处于这个浮躁的社会,却有耐心看到这里,你一定是个很厉害的人吧 👍👍👍

各位博友觉得文章有帮助的话,别忘了点赞 + 关注哦,你们的鼓励就是我最大的动力

博主还会不断更新更优质的内容,加油吧!技术人! 💪💪💪

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

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

相关文章

hydra常见端口服务穷举

目录 工具介绍 参数说明 官方示例 官方字典 ssh爆破 ftp爆破 mysql爆破 smb爆破 rdb爆破 http爆破 redis爆破 工具介绍 hydra 是一个支持众多协议的爆破工具&#xff0c;已经集成到KaliLinux中&#xff0c;直接在终端打开即可 参数说明 -l &#xff1a; 指定破…

Linux下安装MySQL8.0的详细步骤(解压tar.xz安装包方式安装)

Linux下安装MySQL8.0的详细步骤 第一步&#xff1a;下载安装配置 第二步&#xff1a;修改密码&#xff0c;并设置远程连接&#xff08;为了可以在别的机器下面连接该mysql&#xff09; 第三步&#xff1a;使用Navicat客户端连接 搞了一台云服务器&#xff0c;首先要干的活就是…

move_base代码解析(二)MoveBase::planThread

在第一章中第四步执行了planThread函数的线程启动&#xff0c;该步骤会调用planThread函数。这里不是通过函数调用的形式实现的&#xff0c;而是通过线程开关的形式实现的: boost::unique_lock<boost::recursive_mutex> lock(planner_mutex_);//给该线程上锁planner_goal…

117页数字化转型与产业互联网发展趋势及机会分析报告(PPT)

【版权声明】本资料来源网络&#xff0c;知识分享&#xff0c;仅供个人学习&#xff0c;请勿商用。【侵删致歉】如有侵权请联系小编&#xff0c;将在收到信息后第一时间删除&#xff01;完整资料领取见文末&#xff0c;部分资料内容&#xff1a; 产业互联网是以机构组织为主体的…

CentOS7 Hive2.3.9 安装部署(mysql 8.0)

一、CentOS7安装MySQL数据库 查询载mariadb rpm -qa | grep mariadb卸载mariadb rpm -e --nodeps [查询出来的内容]安装wget为下载mysql准备 yum -y install wget在tools目录下执行以下命令&#xff0c;下载MySQL的repo源&#xff1a; wget -P /tools/ https://dev.mysql.…

网络编程学习一

1、初识网络编程2、网络编程三要素3、三要素&#xff08;IP&#xff09;4、IPV4的一些小细节5、Inetaddress类的使用package com.leitao.demo.network;import java.net.InetAddress; import java.net.UnknownHostException;/*** Description: TODO* Author LeiTao* Date 2023/2…

移动WEB开发三、flex布局

零、文章目录 文章地址 个人博客-CSDN地址&#xff1a;https://blog.csdn.net/liyou123456789个人博客-GiteePages&#xff1a;https://bluecusliyou.gitee.io/techlearn 代码仓库地址 Gitee&#xff1a;https://gitee.com/bluecusliyou/TechLearnGithub&#xff1a;https:…

企业数字化管理是什么?如何建立企业数字化管理?

企业数字化管理是什么&#xff0c;如何建立企业数字化管理&#xff1f; 01 什么是企业数字化管理&#xff1f; 提到企业数字化管理&#xff0c;就不得不联想到机器自动化、业务流程自动化以及数字处理自动化这三个概念的区别&#xff1a; ​而抛开那些又臭又长的概念解读&…

支持域自适应的可解释网络改进药物-靶标预测

预测药物-靶点相互作用是药物发现的关键。最近基于深度学习的方法表现出良好的性能&#xff0c;但仍然存在两个挑战&#xff1a; 如何明确地建模和学习药物和靶标之间的局部相互作用&#xff0c;以更好地预测和解释&#xff1b;如何优化新型药物-靶标对预测的泛化性能。 在这…

高斯课堂 计算机网络(下)

第四章、网络层 0、第四章导图 1、网络层概述及IP地址&#xff08;上&#xff09; &#xff08;1&#xff09;网络层概述 无连接指的是在网络层这一层次&#xff0c;我们在发送数据的时候&#xff0c;不需要实现建立连接&#xff0c;这种建立连接的可靠性由谁来保证呢&#x…

【Python入门第十三天】Python 元组

元组&#xff08;Tuple&#xff09; 元组是有序且不可更改的集合。在 Python 中&#xff0c;元组是用圆括号编写的。 实例 创建元组&#xff1a; thistuple ("apple", "banana", "cherry") print(thistuple)运行实例 访问元组项目 您可以通…

【Mysql】存储过程

【Mysql】存储过程 文章目录【Mysql】存储过程1.存储过程1.1 存储过程概述1.2 特点1.3 基本语法1.3.1 创建1.3.2 调用1.3.3 查看1.3.4 删除1.4 变量1.4.1 系统变量1.4.2 用户定义变量1.4.3 局部变量1.5 if1.6 参数1.7 case1.8 循环1.8.1 while1.8.2 repeat1.8.3 loop1.9 游标1.…

keepalived高可用

文章目录前言一、Keepalived简介二、keepalived工作原理三、配置文件四、实验过程1.某台Real Server down2.LVS本身down方法&#xff1a;五、代码详细演示整体过程调度器安装软件、设置测试keepalived对后端RS的健康检测backup服务主机设置总结前言 一、Keepalived简介 Keepali…

【深度学习】训练模型结果同时显示,模型结果对比

码字不易&#xff0c;如果各位看官感觉该文章对你有所帮助&#xff0c;麻烦点个关注&#xff0c;如果有任何问题&#xff0c;请留言交流。如需转载&#xff0c;请注明出处&#xff0c;谢谢。 文章链接&#xff1a;【深度学习】训练模型结果同时显示&#xff0c;模型结果对比_莫…

Python - 绘制人体生物节律

文章目录项目说明关于人体生物节律用到的技术代码实现获取每月有多少天计算每天到生日过了多少天计算节律绘图结果项目说明 这里仿照 http://www.4qx.net/The_Human_Body_Clock.php 做一个人体生物节律的计算和展示 关于人体生物节律 百度/维基百科 解释 https://zh.wikiped…

DaVinci 偏好设置:系统 - 内存和 GPU

偏好设置 - 系统/内存和 GPUPreferences - System/Memory and GPU内存和 GPU Memory and GPU 选项卡提供了内存配置以及 GPU 配置的相关设置。内存配置Memory Configuration系统内存System Memory列出了所用电脑的总的可用内存。限制 Resolve 内存使用到Limit Resolve memory u…

Java中如何创建和使用对象?

要想使用一个类则必须要有对象。在Java程序中可以使用new关键字创建对象&#xff0c;具体格式如下&#xff1a;类名对象名称null; 对象名称new 类名();上述格式中&#xff0c;创建对象分为声明对象和实例化对象两步&#xff0c;也可以直接通过下面的方式创建对象&#xff0c;具…

从 ClickHouse 到 Apache Doris,腾讯音乐内容库数据平台架构演进实践

导读&#xff1a;腾讯音乐内容库数据平台旨在为应用层提供库存盘点、分群画像、指标分析、标签圈选等内容分析服务&#xff0c;高效为业务赋能。目前&#xff0c;内容库数据平台的数据架构已经从 1.0 演进到了 4.0 &#xff0c;经历了分析引擎从 ClickHouse 到 Apache Doris 的…

H5使用微信JSSDK的wx.chooseImage进行多文件上传

背景&#xff1a;项目需要用H5做一个上传多图片合成的功能页面&#xff0c;这里我先做了调查&#xff0c;调查结果是安卓在微信内核不能使用传统的input file进行多文件上传&#xff0c;只能限制每次上传一张&#xff0c;ios则不限制&#xff0c;所以H5想在微信内核进行多图片上…

实验室三维磁场电磁铁的主要用途及技术指标

产品用途&#xff1a; 北京锦正茂科技有限公司自主研发的多极电磁铁以四极电磁铁居多&#xff0c;也有五极、六极、八极等多极的应用&#xff0c;主要应用于磁滞现象研究、磁化系数测量、霍尔效应研究、磁光实验、磁场退火、核磁共振、电子顺磁共振、生物学研究、磁性测量、磁性…