C++常见面试题及答案

95272021-12-24 12:57

  面试题这种有点类似于应试教育,你做得多了就有感觉了,所以积累还比较重要。

C++常见面试题及答案

  1、定义和声明的区别。

  声明告知编译器变量的类型和名称,不会为变量分配空间。

  定义需要分配空间,同一变量可以多次声明,但只能定义一次。

  2、C++文件编译和执行的四个阶段。

  1)预处理:根据文件中的预处理指令修改源文件的内容。

  编译:编译成汇编代码。

  汇编:将汇编代码翻译成目标机器指令。

  链接:链接目标代码生成可执行程序。

  3、如何扩展STL中vector的实现?

  使用vector的注意事项及其原因,频繁调用push_back()对vector性能的影响及原因。

  vector是一个动态增长的数组,有一个指针指向一个连续的空间。当空间无法安装时,它将申请一个更大的空间,复制原始数据,并释放原始的旧空间。删除时,空间不会被释放,只会清空内部的数据。与array相比,静态空间一旦配置,就无法改变大小。

  当vector的动态增加尺寸时,并不是在原始空间上持续新的空间(不能保证原始空间后面有可供配置的空间),而是用原始尺寸的两倍来配置更大的空间,然后复制原始内容并释放原始空间。VS下扩容1、5倍,GCC下扩容2倍。

  当原始空间不足以存储新值时,每次调用push_back方法时,都会重新分配新空间,以满足新数据的添加操作。如果这种操作经常在程序中进行,它仍然消耗性能。

  4、STLunordered_map和map的区别。

  map是STL中的相关容器,提供键值对的数据管理。底层是红黑树,实际上是二叉排序树和非严格意义上的二叉平衡树。因此,map中的所有数据都是有序的,map的查询、插入和删除操作的时间复杂度是O(logN)。

  unordered_map类似于map,都是存储key-value对,可以通过key快速索引到value,不同的是unordered_map不会按key排序。unordered_map底层是一个防冗余的哈希表,存储时根据key的hash值判断元素是否相同,即unordered_map内部无序。

  5、C++内存管理。

  内存分为五个区域:栈、堆、自由存储区、静态存储区、常量区。

  栈:存储函数的参数和局部变量,编译器自动分配和释放。

  堆:new关键字动态分配的内存由程序员手动释放,否则程序结束后,操作系统将自动回收。

  自由存储区:由malloc分配的内存与堆非常相似,由相应的free释放。

  全局/静态存储区:存储全局变量和静态变量。

  常量区:存放常量,不得修改。

  以上就是小编为大家整理发布的“C++常见面试题及答案”一文,更多相关内容尽在开课吧广场C++教程频道。

免责声明:本站所提供的内容均来源于网友提供或网络搜集,由本站编辑整理,仅供个人研究、交流学习使用。如涉及版权问题,请联系本站管理员予以更改或删除。
有用
分享
全部评论快来秀出你的观点
登录 后可发表观点…
发表
暂无评论,快来抢沙发!
算法刷题核心能力提升营