C++面试100问!(一)

STL中MAP数据存放形式?

        红黑树。unordered map底层结构是哈希表。

STL有什么基本组成?

        容器、迭代器、仿函数、算法、分配器、配接器, 他们之间的关系:分配器给容器分配存储空间,算法通过迭代器获取容器中的内容,仿函数可以协助算法完成各种操作,配接器用来套接适配仿函数。

 STL中map与unordered_map?

        1、Map映射,map 的所有元素都是 pair,同时拥有实值(value)和键值(key)。pair 的第一元素被视为键值,第二元素被视为实值。所有元素都会根据元素的键值自动被排序。不允许键值重复。 底层实现:红黑树 适用场景:有序键值对不重复映射

        2、unordered_map和map类似,都是存储的key-value的值,可以通过key快速索引到value。不同的是unordered_map不会根据key的大小进行排序,存储时是根据key的hash值判断元素是否相同,即unordered_map内部元素是无序的。unordered_map的key需要定义hash_value函数并且重载operator==。unordered_map的底层是一个防冗余的哈希表(采用除留余数法)。哈希表最大的优点,就是把数据的存储和查找消耗的时间大大降低,时间复杂度为O(1);而代价仅仅是消耗比较多的内存。

STL中迭代器的作用,有指针为何还要迭代器?

        1、迭代器 Iterator(迭代器)模式又称Cursor(游标)模式,用于提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示。或者这样说可能更容易理解:Iterator模式是运用于聚合对象的一种模式,通过运用该模式,使得我们可以在不知道对象内部表示的情况下,按照一定顺序(由iterator提供的方法)访问聚合对象中的各个元素。 由于Iterator模式的以上特性:与聚合对象耦合,在一定程度上限制了它的广泛运用,一般仅用于底层聚合支持类,如STL的list、vector、stack等容器类及ostream_iterator等扩展iterator。

         2、迭代器和指针的区别 迭代器不是指针,是类模板,表现的像指针。他只是模拟了指针的一些功能,通过重载了指针的一些操作符,->、*、++、--等。迭代器封装了指针,是一个“可遍历STL( Standard Template Library)容器内全部或部分元素”的对象, 本质是封装了原生指针,是指针概念的一种提升(lift),提供了比指针更高级的行为,相当于一种智能指针,他可以根据不同类型的数据结构来实现不同的++,--等操作。 迭代器返回的是对象引用而不是对象的值,所以cout只能输出迭代器使用*取值后的值而不能直接输出其自身。

         3、迭代器产生原因 Iterator类的访问方式就是把不同集合类的访问逻辑抽象出来,使得不用暴露集合内部的结构而达到循环遍历集合的效果。

epoll原理?

        调用顺序: int epoll_create(int size);

                           int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);

                            int epoll_wait(int epfd, struct epoll_event *events,int maxevents, int timeout);

        首先创建一个epoll对象,然后使用epoll_ctl对这个对象进行操作,把需要监控的描述添加进去,这些描述如将会以epoll_event结构体的形式组成一颗红黑树,接着阻塞在epoll_wait,进入大循环,当某个fd上有事件发生时,内核将会把其对应的结构体放入到一个链表中,返回有事件发生的链表。

STL迭代器是怎么删除元素的呢?

        这个主要考察的是迭代器失效的问题。

        1.对于序列容器vector,deque来说,使用erase(itertor)后,后边的每个元素的迭代器都会失效,但是后边每个元素都会往前移动一个位置,但是erase会返回下一个有效的迭代器;

         2.对于关联容器map set来说,使用了erase(iterator)后,当前元素的迭代器失效,但是其结构是红黑树,删除当前元素的,不会影响到下一个元素的迭代器,所以在调用erase之前,记录下一个元素的迭代器即可。

        3.对于list来说,它使用了不连续分配的内存,并且它的erase方法也会返回下一个有效的iterator,因此上面两种正确的方法都可以使用。

STL里面set和map怎么实现的?

        1、集合,所有元素都会根据元素的值自动被排序,且不允许重复。 底层实现:红黑树 set 底层是通过红黑树(RB-tree)来实现的,由于红黑树是一种平衡二叉搜索树,自动排序的效果很不错,所以标准的 STL 的 set 即以 RB-Tree 为底层机制。又由于 set 所开放的各种操作接口,RB-tree 也都提供了,所以几乎所有的 set 操作行为,都只有转调用 RB-tree 的操作行为而已。 适用场景:有序不重复集合

        2、map 映射。map 的所有元素都是 pair,同时拥有实值(value)和键值(key)。pair 的第一元素被视为键值,第二元素被视为实值。所有元素都会根据元素的键值自动被排序。不允许键值重复。 底层:红黑树 适用场景:有序键值对不重复映射。

malloc与new区别?

        malloc需要给定申请内存的大小,返回的指针需要强转。 new会调用构造函数,不用指定内存大小,返回的指针不用强转。

静态函数和虚函数的区别?

        静态函数在编译的时候就已经确定运行时机,虚函数在运行的时候动态绑定。虚函数因为用了虚函数表机制,调用的时候会增加一次内存开销。

说说你了解的RTTI?

        运行时类型检查,在C++层面主要体现在dynamic_cast和typeid,VS中虚函数表的-1位置存放了指向type_info的指针。对于存在虚函数的类型,typeid和dynamic_cast都会去查询type_info。

说一说extern“C”?

         C++调用C函数需要extern C,因为C语言没有函数重载。

说一说隐式类型转换?

        首先,对于内置类型,低精度的变量给高精度变量赋值会发生隐式类型转换,其次,对于只存在单个参数的构造函数的对象构造来说,函数调用可以直接使用该参数传入,编译器会自动调用其构造函数生成临时对象。

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

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

相关文章

实在智能Agent——RPA终极进化方向

RPA技术备受瞩目,它通过“机器人”自动化了人力执行的重复性、低复杂度任务,解放了员工并降低了企业成本。RPA机器人全天候运行,避免人为错误,高效处理任务,成为处理事务、操作数据、回应查询的理想选择。在管理后台&a…

第四百一十回

文章目录 1. 概念介绍2. 方法与细节2.1 获取方法2.2 使用细节 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何获取当前系统语言"相关的内容,本章回中将介绍如何获取时间戳.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我们在本章…

实体店运营方案大全:从选址到日常管理的全面指导

想开实体店或正在创业的朋友们,大家好!今天,我作为一个鲜奶吧5年的创业者,为大家分享一份实体店运营方案大全,涵盖从选址到日常管理的各个方面。我在实体店方面有一些心得体会,今天就来和大家聊聊&#xff…

【面试自测】Java并发

Synchronized 用 过 吗 , 其 原 理 是 什 么 ?获 取 对 象 的 锁 , 这 个 “ 锁 ” 到 底 是 什 么 ? 如 何 确 定 对 象 的 锁 ?什 么 是 可 重 入 性 , 为 什 么 说 Synchronized 是 可 重 入 锁 &#x…

【软考】系统集成项目管理工程师(十九)收尾管理【1分】

一、项目收尾的内容 二、总结 三、软件后续工作 练一练 【例1-17上】(B)不属于项目验收的内容。 A.验收测试 B.系统维护工作 C.项目终验 D.系统试运行 【例2-17上】信息系统集成项目完成验收后要进行一个综合性的项目后评估,评估的内容一般包括&#…

uView LoadingIcon 加载动画

此组件为一个小动画,目前用在uView的loadMore加载更多等组件的正在加载状态场景。 #平台差异说明 App(vue)App(nvue)H5小程序√√√√ #基本使用 通过mode设定动画的类型,circle为圆圈的形状&#xff0…

探索Spring中的属性注入:@Value注解解析与应用

探索Spring中的属性注入:Value注解解析与应用 探索Spring中的属性注入:Value注解解析与应用摘要引言正文作用代码准备示例注入字符串注入属性注入Bean及其属性 其他属性注入优先级问题对Value属性注入的扩展Spring Boot对Value类型转换的扩展 代码案例演…

【单调栈】[USACO09MAR] Look Up S

题目描述 约翰的 N N N 头奶牛站成一排,奶牛 i i i 的身高是 H i H_i Hi​。现在,每只奶牛都在向右看齐。对于奶牛 i i i,如果奶牛 j j j 满足 i < j i<j i<j 且 H i < H j H_i<H_j Hi​<Hj​,我们可以说奶牛 i i i 可以仰望奶牛 j j j。 求出…

第三门课:结构化机器学习项目-机器学习策略

文章目录 1 机器学习策略一1.1 为什么是ML策略&#xff1f;1.2 正交化1.3 单一数字评估指标1.4 满足和优化指标1.5 训练、开发及测试集划分1.6 开发集和测试集的大小1.7 什么时候改变开发、测试集和指标&#xff1f;1.8 为什么是人的表现&#xff1f;1.9 可避免偏差1.10 理解人…

C/C++面试题

1、static的作用 1)修饰局部变量 概念:当使用static关键字修饰局部变量时,该变量就变成了静态局部变量。这意味着它不再是传统的自动存储期变量,而是具有静态存储期。 作用域:静态局部变量的作用域确实没有变化,它仍然是在其定义的局部范围内,即它所在的代码块(例如函…

前端开发者如何打造自己的生态以及ip

作为独立开发者&#xff0c;在公司的岗位上面&#xff0c;经常面对的是页面&#xff0c;但我们不能局限页面&#xff0c;页面是切入点。 1在需求页面的过程中&#xff0c;我们会接触ui&#xff0c;原型&#xff0c;软件&#xff0c;需求&#xff0c; 2在接口对接的过程中&#…

Unity UGUI之Toggle基本了解

在Unity中&#xff0c;Toggle一般用于两种状态之间的切换&#xff0c;通常用于开关或复选框等功能。 它的基本属性如图&#xff1a; 其中&#xff0c; Interactable&#xff08;可交互&#xff09;&#xff1a;指示Toggle是否可以与用户交互。设置为false时&#xff0c;禁用To…

在Linux系统中如何查询日志?

在工作中&#xff0c;我们有时候会定位问题&#xff0c;这时候就需要查询日志了&#xff0c;那么查询日志的命令有哪些呢&#xff1f; cat 查看某个日志文件中的所有内容。 使用示例&#xff1a;cat file.txt 显示 file.txt 文件的所有内容。 如果要对查询的结果进行筛选&am…

Java发展简史

20世纪90年代,单片式计算机系统问世,这种系统不仅价格低廉,而且功能强大,大幅提高了消费电子产品的智能化水平。 为抢占市场,1991年Sun公司成立了由詹姆斯高斯林领导的"Green"项目组,旨在开发能在各种消费电子产品上运行的程序架构。最初考虑使用C编程,但由于其过于…

17双体系Java学习之数组的长度

数组的长度 //获取数组长度 arrays.lengthfor (int i 0; i <nums.length; i) {sum sum nums[i];}System.out.println("总和为&#xff1b;"sum);

2k_Day4:OpenFeign、Nacos、JSR303

SpringCloud-Alibaba Nacos 做为项目的注册中心、配置中心 OpenFeign 远程调用 声明式的HTTP访问 1.引入依赖OpenFeign 2.新增coupon项目被调的collection接口RequestMapping("/member/list") 3.新增member项目下feign/CouponFeignService调用的service接口 4.主函数…

免费阅读篇 | 芒果YOLOv8改进110:注意力机制GAM:用于保留信息以增强渠道空间互动

&#x1f4a1;&#x1f680;&#x1f680;&#x1f680;本博客 改进源代码改进 适用于 YOLOv8 按步骤操作运行改进后的代码即可 该专栏完整目录链接&#xff1a; 芒果YOLOv8深度改进教程 该篇博客为免费阅读内容&#xff0c;直接改进即可&#x1f680;&#x1f680;&#x1f…

c++算法学习笔记 (7) BFS

1.走迷宫 #include <iostream> #include <algorithm> #include <queue> #include <cstring> using namespace std; typedef pair<int, int> PII; const int N 105; int n, m; int g[N][N]; // 存图 int d[N][N]; // 每个点到起点的距离 queue&…

【每日一题】134. 加油站

在一条环路上有 n 个加油站&#xff0c;其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车&#xff0c;从第 i 个加油站开往第 i1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发&#xff0c;开始时油箱为空。 给定两个整数数组 gas 和 cost &…

信号处理--基于正则化聚合的共空间模态(CSP)脑电信号分类

目录 理论 工具 方法实现 代码获取 参考文献 理论 传统的通用空间模式 (CSP) 是一种流行的算法,用于对脑电图 (EEG) 信号进行分类。本文主要介绍小样本设置 (SSS) 中 CSP 的正则化和聚合技术。传统的 CSP 基于样本协方差矩阵估计。如果训练样本数量较少,其脑电图分类的…