![](https://img-blog.csdnimg.cn/20190719171012648.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
《C++高频面试题》
整理自牛客、各论坛。
ZHRHRH
有多大武功,就需要多大佛法。
展开
-
《基础知识——容器和算法》
map和set有什么区别,分别又是怎么实现的? map和set都是C++的关联容器,其底层实现都是红黑树(RB-Tree)。由于 map 和set所开放的各种操作接口,RB-tree 也都提供了,所以几乎所有的 map 和set的操作行为,都只是转调 RB-tree 的操作行为。map和set区别在于:(1)map中的元素是key-value(关键字—值)对:关键字起到索引的作用...原创 2019-07-19 21:24:38 · 141 阅读 · 0 评论 -
《基础知识——细节知识》
C语言是怎么进行函数调用的? 每一个函数调用都会分配函数栈,在栈内进行函数执行过程。调用前,先把返回地址压栈,然后把当前函数的esp指针压栈。 C语言参数压栈顺序? 从右到左。 C++如何处理返回值? 生成一个临时变量,把它的引用作为函数参数传入函数内。 C++中拷贝赋值函数的形参能否进行值传递? 不能。如果是这种情况下,调用拷贝构造函数的时候,...原创 2019-07-19 17:33:15 · 126 阅读 · 0 评论 -
《基础知识——const》
const修饰成员函数的目的是什么? 类的成员函数后面加 const,表明这个函数不会对这个类对象的数据成员(准确地说是非静态数据成员)作任何改变。(在设计类的时候,一个原则就是对于不改变数据成员的成员函数都要在后面加 const,而对于改变数据成员的成员函数不能加 const。所以 const 关键字对成员函数的行为作了更加明确的限定:有 const 修饰的成员函数(指 const...原创 2019-07-19 10:23:24 · 487 阅读 · 0 评论 -
《基础知识——内存四区》
内存四区模型 图1、内存四区模型【流程说明】:1、操作系统把物理硬盘代码load到内存2、操作系统把c代码分成四个区3、操作系统找到main函数入口执行 1、内存四区: 一个由C/C++编译的程序占用的内存分为以下几个部分:1、栈区(stack):由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。...原创 2019-06-10 16:57:51 · 525 阅读 · 0 评论 -
《基础知识——代码相关》
有段代码写成了下边这样,如果在只修改一个字符的前提下,使代码输出20个hello? for(int i = 0; i < 20; i--) cout << "hello" << endl;【答案】:for(int i = 0; i + 20; i--) cout << "hello" << endl;...原创 2019-07-19 09:57:46 · 2002 阅读 · 0 评论 -
《基础知识——main函数执行前先运行》
【原文链接】 在gcc中: 可以使用attribute关键字,声明constructor和destructor,代码如下:#include <stdio.h> __attribute((constructor)) void before_main() { printf("%s/n",__FUNCTION__); } __...原创 2019-07-19 09:37:50 · 1956 阅读 · 0 评论 -
《基础知识——++i 和 i++的区别与实现》
++i 和 i++的区别 ++i先自增1,再返回,i++先返回i,再自增1 ++i 和 i++的实现 【++i 的实现】:int& int::operator++(){*this +=1;return *this;}【i++ 的实现】:const int int::operator(int){int oldValue = *this;...原创 2019-07-18 23:37:38 · 151 阅读 · 0 评论 -
《基础知识——strcpy和strlen》
strlen() 和 strcpy()函数的区别 这两个一个是返回一个C风格字符串的长度,一个是对一个C风格字符串的拷贝,两个本来功能上是不同的,此外,他们还有一些细小的区别:strlen("hello")返回的结果是5,是不包含字符串结尾处的‘\0’,但是strcpy(str1,str2),会拷贝str2中的‘\0’。 【补充】(C字符串——库函数系列(strlen、strca...原创 2019-07-18 17:17:57 · 946 阅读 · 0 评论 -
《基础知识——方法重载和方法覆盖》
方法重载 【重载】:在一个类中用相同的名字创建多个方法(每个方法的参数表不同)。【作用】:解决了同一个类中,相同的功能方法名不同的问题,既然是相同的功能,那么方法的名字就应该相同。【方法重载原则】:(两同一不同)同类中,方法名相同,方法参数列表不同(参数类型、参数个数、参数顺序) 方法覆盖 【覆盖】:在一个类中创建的方法与父类中方法的名字、 返回类型和参数表相...原创 2019-07-18 17:06:00 · 179 阅读 · 0 评论 -
《基础知识——fork( )函数》
fork( )函数: fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。 返回值: 1)在父进程中,fork返回新创建子进程的进程ID;2)在子进程中,fork返回0;3)如果出现错误,fork返回一个负值;【错误原因】:1)当前的进程数已经达到了系...原创 2019-07-18 16:58:23 · 88 阅读 · 0 评论 -
《基础知识——析构函数、虚函数》
为什么析构函数必须是虚函数? 防止内存泄露。【解释】:构造函数:进行初始化成员变量的函数。析构函数:在对象生命周期结束的时候,完成资源的回收和清理。虚析构函数:只有当一个类被定义为基类的时候,才会把析构函数写成虚析构函数。定义一个基类的指针p,在delete p时,如果基类的析构函数是虚函数,这时只会看p所赋值的对象,如果p赋值的对象是派生类的对象,就会调用派生类的析构函...原创 2019-07-18 10:38:49 · 484 阅读 · 0 评论 -
《基础知识——数组与指针、野指针》
数组与指针的区别与联系 数组 指针 概念 保存数据 保存数据的地址 赋值 只能一个一个元素的赋值或拷贝 同类型指针变量可以相互赋值 存储方式 在内存中是连续存放 数组的存储空间,不是在静态区就是在栈上 可以指向任意类型的数据 指针...原创 2019-07-16 20:51:00 · 176 阅读 · 0 评论 -
《基础知识——判断是2的倍数&1的个数》
判断是2的倍数 即判断该数二进制末位是不是0:a % 2 == 0 或者a & 0x0001 == 0。 1的个数 十进制中1的个数:直接逐位除十取余判断 二进制中1的个数(剑指Offer-15) 右移与1判断(如果是负数,一直右移会陷入死循环) 为避免死循环,左移1与原数相与循环判断(循环次数等于整数二进制的位数) n = (n - 1)...原创 2019-07-16 12:41:04 · 740 阅读 · 0 评论 -
《基础知识——c++中四个智能指针》
智能指针主要用于管理在堆上分配的内存,它将普通的指针封装为一个栈对象。当栈对象的生存周期结束后,会在析构函数中释放掉申请的内存,从而防止内存泄漏。C++ 11中最常用的智能指针类型为shared_ptr,它采用引用计数的方法,记录当前内存资源被多少个智能指针引用。该引用计数的内存在堆上分配。当新增一个时引用计数加1,当过期时引用计数减一。只有引用计数为0时,智能指针才会自动释放引用的内存资源。对s...原创 2019-07-16 12:11:49 · 235 阅读 · 0 评论 -
《基础知识——判断点P在△ABC内》
需要注意的是,这里假定点和三角形位于同一个平面内。 内角和法 连接点P和三角形的三个顶点得到三条线段PA,PB和PC,求出这三条线段与三角形各边的夹角,如果所有夹角之和为180度,那么点P在三角形内,否则不在,此法直观,但效率低下。 同向法 假设点P位于三角形内,会有这样一个规律,当我们沿着ABCA的方向在三条边上行走时,你会发现点P始终位于边AB,BC和CA的右侧。我们...原创 2019-07-16 11:07:50 · 608 阅读 · 0 评论 -
《基础知识——c++中指针和引用的区别》
c++中指针和引用的区别 ★ 相同点:都是地址的概念; 指针指向一块内存,它的内容是所指内存的地址; 引用是某块内存的别名。★ 区别: 1. 指针是一个实体,而引用仅是个别名; 2. 引用使用时无需解引用(*),指针需要解引用; 3. 引用只能在定义时被初始化一次,之后不可变;指针可变; 引用“从一而终” ^_^...原创 2019-07-16 10:05:44 · 97 阅读 · 0 评论 -
《基础知识——c++中四种cast转换》
https://blog.csdn.net/qq_22080999/article/details/812799541. const_cast<T> (expression) //移除常量性const_cast 一般用于强制消除对象的常量性。它是唯一能做到这一点的 C++ 风格的强制转型。2. static_cast<T> (express...原创 2019-07-16 09:39:51 · 270 阅读 · 0 评论 -
《基础知识——C和C++的主要区别》
C和C++的主要区别 设计思想上:C++是面向对象的语言,而C是面向过程的结构化编程语言语法上:C++具有封装、继承和多态三种特性C++相比C,增加多许多类型安全的功能,比如强制类型转换、C++支持范式编程,比如模板类、函数模板等知乎复制:你问区别,那一定有区别,语言在设计走向上总是朝着更加优化和简便的方向去开发的,这是最原始的动机,也是根本区别,只不过相应的...原创 2019-07-15 22:57:45 · 465 阅读 · 0 评论 -
《基础知识——static关键字的作用》
说一下static关键字的作用C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static。前者应用于普通变量和函数,不涉及类;后者主要说明static在类中的作用。面向过程(1 静态全局变量 2 静态局部变量 3 静态函数)静态全局变量在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量。我们先举一个静态全局变量的例...原创 2019-07-15 21:05:47 · 109 阅读 · 0 评论