- 博客(56)
- 资源 (1)
- 收藏
- 关注
原创 【STL学习之路】vector的使用 | vector的迭代器失效问题
vector就是顺序表的封装,是一个模板类,如上图所示。为方便vector里可以存任何数据类型,因此搞成了模板。第一个参数是模板类型T,T可以是int,double,char等,也可以是其他class或者struct第二个参数是一个空间配置器,(STL极致追求效率,向内存池来申请空间而不是直接向堆)。这个参数是缺省,一般不用管它。
2022-12-26 21:15:21
1072
2
原创 【笔试刷题训练】day_17
A:虚函数的作用是实现了多态,虚函数的实现利用了继承B:✔C:虚函数需要先去虚表中找到函数地址再进行调用,与编译期间就确定地址的静态函数相比,效率较低。✔D:必须借助父类指针 / 引用 ✔A,B,C说法都没问题D:覆盖也叫重写,函数必须是相同函数名,并且参数个数和类型都相同,题目说法❌多态的条件之一:父类的指针或引用去调用,所以引用可以作为产生多态效果的手段!子类对象 赋值给基类对象 / 基类引用 / 基类的指针是可以发生的,,即指向父类的那一部分。选项B说法是错误的但是。
2022-11-07 09:08:07
218
1
原创 【笔试刷题训练】day_15
首先,A* p = new B;这里会调用B的构造函数,B是A的子类,所以构造B的时候会先调用A的构造函数,但是在A的构造函数中会调用bar()函数,而bar是虚函数,又满足是父类的指针调用,理应完成多态。但实际上,**在构造函数没有执行完的时候是不会执行多态机制的!!原因如下:因为虚表指针是在有虚函数的情况下编译器自动添加的一个成员,它在初始化列表进行初始化的子类调用构造函数时,会先调用基类构造函数。此时未执行子类构造,子类的虚表指针还没有完成初始化,也就是说子类的虚表还没有构造完成。
2022-11-05 23:37:40
381
原创 C++构造函数中调用虚函数为什么不会实现多态
这是一种特例,在这种情况下,即在构造子类时调用父类的构造函数,而父类的构造函数中又调用了虚成员函数,这个虚成员函数即使被子类重写,也不允许发生多态的行为。如果父类构造函数中调用虚函数,而此时的虚指针如果指向子类的虚表,即允许多态发生,由于子类的构造函数还没有执行,子类中的成员未初始化,在所调用的虚函数中可能会发生访问子类成员的行为,其行为是不合法的!1.我们定义一个子类对象,先执行父类的构造函数,编译器会自动给子类的VPTR指针赋值,使其指向父类的虚函数表。而之所以要这样设计,有可能是出于安全问题。
2022-11-05 08:54:00
794
原创 【笔试刷题训练】day_14
成员是否可以访问取决于继承之后的权限,与this指针无关类中的成员函数只有一份,对于多个对象都是调用的这一个代码,那么如何区分是谁调用的该函数呢?实际上,成员函数有一个默认隐藏的形参this,每一个对象调用成员函数的时候都会把该对象的地址传递给this,这样在调用的时候就可以知道是哪一个对象调用的该成员函数了所以,this指针的作用就是A:对于.*sizeof.:?这五个运算符不可以重载。
2022-10-31 12:11:12
268
原创 【笔试刷题训练】day_13
因为继承就是为了使用一部分基类的成员,所以一般情况都是公有继承。√B:D:继承方式有三种:公有继承、保护继承、私有继承答案选C但是要注意: virtual inline void func(){} 这段代码是可以通过编译的!因为inline对于编译器来说就是一个建议,所以很有可能不满足内联的条件而成为一个虚函数!看选项,不管定不定义,编译器都会生成默认的析构函数。所以A、B肯定错误析构调用:先子类后父类,所以选C//定义一个纯虚函数,抽象类不能被实例化!那么什么是呢?
2022-10-29 21:42:56
640
1
原创 【笔试刷题训练】day_12
总结:在成员函数中调用delete this,会导致指针错误在析构函数中调用delete this,会导致堆栈溢出(死循环)A: 对于一个类,如果我们不显式写构造函数,编译器会自动生成一个无参数的构造函数,但是如果我们自己显式定义了,这个无参数的默认构造函数就不会生成。所以有没有无参数的构造函数取决于我们自己。B:
2022-10-28 12:37:59
292
原创 【笔试刷题训练】day_10
MyClass* b[6] :创建一个指针数组,数组每一个元素是MyClass* 类型,所以不会调用构造函数。题目中a先声明,b后声明。所以初始化列表中无论a和b谁写在前,都是a先初始化,b后初始化。中(VS系列,gcc系列等),将空类的大小设置为1,用于标识该类创建的对象是存在的!MyClass[5]:创建一个5个对象的数组,所以调用5次构造函数。所以很简单,只需要依次取检查 行、列、主对角线、副对角线即可。初始化列表的初始化顺序 取决于 成员变量的声明顺序。对于空类,并不是0字节,在。
2022-10-23 10:27:30
481
1
原创 【笔试刷题训练】day_09
动态内存开辟和释放需要匹配使用如果不匹配的话可能会出现内存泄漏,或者程序直接崩溃对于new和delete,(假设对类A)delete p对于new[]和delete[]delete p[]所以本题中 new[5]:调用了五次构造函数delete :只会调用一次析构函数 答案选A但选项并不是很严谨,因为对于内置类型来说 new[] 搭配 delete使用不会报错,但是对于自定义类型成员new和delete必须匹配使用,否则就会崩溃!所以理应有个选项为:程序可能崩溃。
2022-10-22 18:59:03
556
1
原创 【笔试刷题训练】day_08
函数传参的时候,函数参数可以是引用也可以是指针类型。引用的底层是指针,所以引用传参的时候底层也是传递的地址,只是在语法角度看到的是传值综上几条,答案选择E,引用其实也是传递的地址!对于B:用一个类的对象赋值给一个另一个对象,说明另一个对象是已经存在的,所以会调用赋值运算符重载,不会调用拷贝构造!这一题考察了构造和拷贝构造的编译器优化问题运算符重载指的是:定义一个类之后,如果想通过该类的对象直接使用某种运算符,编译器是不支持的,因为他不知道对于这个自定义类型这种运算表示什么具体含义。
2022-10-21 21:43:55
354
原创 【笔试刷题训练】day_07
内联函数对于编译器只是一个建议,如果该函数没有递归、循环、并且代码较少,那么编译器就会采取内联,否则就不会采取内联的建议所以选择:C回顾:类的两种定义方式所以答案选A,类中包括数据成员和函数成员的声明B: 默认权限是私有C: 共有、私有、保护哦都可以D: 可以在类外,也可以在类里定义初始化列表是成员真正初始化的地方,初始化列表中,只能对类中非静态的成员变量进行初始化,因为静态的成员变量是不依赖于对象,只是依赖于类的!静态成员在类外部进行初始化三种必须在初始化列表进行初始化的成员。
2022-10-21 11:56:21
344
原创 【笔试刷题训练】day_06
补充知识:printf(格式化串,参数1,参数2…),printf的参数是可变参数格式化串:printf中的后面的参数列表按照什么格式打印%d:按照整型方式打印%f:按照float方式打印但是格式化串有规定,%后面跟上特定的字符才代表一定的格式化,比如%Q就是无效的格式,当格式无效的时候,编译器会自动忽略%所以printf(“%Q\n”,15) : 直接输出Q所以对于%%,就相当于一个%(其实这样就类似于 转义字符\\表示一个\)所以答案选择 A:%%
2022-10-16 22:37:22
257
原创 【笔试刷题训练】day_05
所以最终答案为xycdBCD,选D所以:one在对齐数为4和8的时候都是16字节two在对齐数为4的时候为16,对齐数为8的时候为24👉 题目链接2. 连续最大和👉 题目链接动规
2022-10-16 13:44:59
1462
4
原创 【笔试刷题训练】day_04
C/C++中各种进制的表示方法二进制:在数字的末尾加b,如101010b八进制:在数字前面加数字0,如0123十进制:数字本身,如123十六进制:数字前面加0x 或者 数字后面加h,如0x123、123h%d:十进制方式输出%o:八进制方式输出%x:十六进制方式输出所以显而易见,题目所给两个数分别是8进制和10进制,十进制123转化为8进制为173,所以选择C题目要求把flag的第二个bit位置为0那么与flag运算的数的第二个bit位应该是0,而2的二进制位0000 0010。
2022-10-15 20:55:56
537
1
原创 【笔试刷题训练】day_03
二维数组的初始化,不同的语言有些不同,有些遗忘这一题涉及到函数栈帧、大小端问题,值得思考一下题目所给是32位下小端机器,但是如果再64位机器下,结果却是: 1,2,3这是为什么呢?这就要结合体系结构来说了你可能想说,%d不是打印int类型吗?难道64位下%d是打印8个字节吗?其实所谓的打印,也是CPU先把数据取出来进行计算,然后才输出到屏幕上的,取数据的时候,是完整的取的。CPU需要先把数据取出来,然后再根据特定的打印格式去输出!
2022-10-14 10:22:28
466
2
原创 【笔试刷题训练】day_02
m.nf%e%lf可以不进行初始化,正确(2):i的地址赋值给 int const*类型 没毛病(3):p2中 const修饰的是指针指向的内容,p2指针本身可修改,正确(4):i的地址赋值给p3,p3指向的内容可修改,p3不可修改,正确(5):改变p3的指向内容,正确(6):改变p2的指向内容,错误!(7):修改p3的指向,错误!’3.5.6.这里考察的是位段的理解(1) a是一个无符号整形,大小为4字节共32位,a占19位,还剩下13位。
2022-10-13 10:43:59
633
4
原创 【笔试刷题训练】day_01
我们利用程序打印看一下,输出如图所示:可以看到,%5.3s输出的只有3个字符,并且前面似乎有两个空格%5.4s输出的有4个字符,前面有一个字符这里有一些没有注意到的知识点%m.ns:m:输出字符串的宽度n:左起截取目标字符串的n个字符,并且是右对齐,补空格所以就可以解释上面的程序了。
2022-10-12 12:21:33
182
原创 【STL学习之路】string的模拟实现
str是一个指针,指向动态申请的数组,如果不显示写一个深拷贝,那么默认生成的拷贝构造就会采取值拷贝的形式进行,优化问题:如果输入的字符串很长,初始版本中读入字符就会不断+= 可能会频繁扩容,效率很低。所以:拷贝的时候需要另外开辟一段新空间,把原对象的空间的内容拷贝到新空间。优化的思想: 利用一个临时数组,先把读到的数据放到临时数组中。缺点:strlen()是O(N)的接口,调用多次,效率太低!其实不是的,因为可以通过接口来实现容器内成员的更改。如果临时数组满了,就接到字符串的后面。
2022-10-03 22:56:59
368
4
原创 【C++入门】模板
template < class T1 , class T2 , . . . , class Tn > class 类模板名 {// 类内成员定义 };以Stack为例,下面就是一个Stack类的模板,模板参数为Tpublic :T * _a;};
2022-09-13 19:48:13
352
原创 【数据结构从菜鸟到大牛】10分钟搞懂归并排序 ~ <归并排序算法>【图解算法】【归并排序非递归】
什么是归并排序归并排序的原理,画图演示归并排序过程归并排序的非递归实现
2022-07-03 17:51:28
819
3
原创 【数据结构从菜鸟到大牛】都2022了,我不允许你还不懂快速排序 <快速排序算法>【附动图详解~】【快排的三种版本~】【快排的优化】
快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法,最初是以递归形式实现的排序算法。快速排序,作为以’快‘为名字的排序,我们必须要搞清楚他为什么快?本文章一文带你搞懂,快速排序的基本原理,快速排序的3种实现方法还有快速排序的优化,以及如何采用非递归的方法实现快速排序...
2022-06-27 15:01:25
572
34
原创 Java基础——初识Java(3) 简单认识方法
Java学习笔记本文简单地写了 Java的方法的知识通过类别C的函数 对方法进行了解释Java方法的重载是什么方法递归
2022-06-25 12:03:36
234
3
原创 Java基础——Java的输入(Scanner对象的使用)
Java的输入方式 System.int.read()读入字符Scanner对象的使用以及常见的坑
2022-06-22 12:13:29
905
4
原创 Java基础——初始Java(2)数据类型+运算符
在C语言中,没有专门的字符串类型我们利用定义字符串而在Java中 有专门的字符串类型就是一种引用类型注意问题在Java中,没有所谓的全局变量的概念Java中变量分为成员变量局部变量常量分为final修饰的变量 —>常量(相当于C中const)被final修饰的变量具有了常属性,不可以在修改常量和变量的区别:其实C语言是一个相对弱类型的语言在C中,long类型可以赋值给int类型顶多就会警告一下(大字节赋值给小字节 可能损失精度)在Java中,严令的错误!long类型无法赋值给in
2022-06-22 10:40:56
636
2
原创 【数据结构从菜鸟到大牛】二叉树链式结构
本文介绍了二叉树链式结构的实现,二叉树前序遍历,中序遍历,后序遍历,层序遍历二叉树的节点个数,二叉树高度,二叉树的查找,二叉树销毁等接口
2022-06-06 12:31:40
220
16
原创 关于最近的总结(收心)
由于以上问题,让我差点丢失了自己的本心,学校里的水课程按理来说不应该成为我的编程之路的绊脚石,很多作业应该平时就完成,否则到最后也不会因为时间不够而狂补占用掉学习技术的时间这个暑假,收收心,好好提升自己flag谁都会立,关键看谁能坚持!开学前会再进行一次总结,督促自己!每日坚持打卡跑步!希望正在读这篇文章的你,我们共勉 🧡!
2022-06-01 22:46:35
481
2
原创 【数据结构从菜鸟到大牛】栈的实现
✨ 写在前面 🎃 哈喽大家好👋👋👋🌱 作为一个初入编程的大学生,知识浅薄🌱 写文章的同时也是在巩固自己,同时希望我的文章对你有所帮助!🌱 我的其他文章 1.【数据结构】时间复杂度&&空间复杂度 2.【数据结构】顺序表接口实现及详解 2.【数据结构】带你手撕单链表!🌱 初入编程的世界 前方"路漫漫"🛣️ 每天我们都要进步一点点💧🌱 希望分享知识的同时可以和你们一起进步🍻📇文章目录🚀什么是栈🚀2🚀3🚀4🚀什么是栈🚀2🚀3
2022-05-15 17:29:38
592
原创 【数据结构从菜鸟到大牛】顺序表和链表的区别
✨ 写在前面 🎃 哈喽大家好👋👋👋🌱 作为一个初入编程的大学生,知识浅薄🌱 写文章的同时也是在巩固自己,同时希望我的文章对你有所帮助!🌱 我的其他文章 1.【数据结构】时间复杂度&&空间复杂度 2.【数据结构】顺序表接口实现及详解 2.【数据结构】带你手撕单链表!🌱 初入编程的世界 前方"路漫漫"🛣️ 每天我们都要进步一点点💧🌱 希望分享知识的同时可以和你们一起进步🍻📇文章目录🚀🚀2🚀3🚀4🚀🚀2🚀3🚀4
2022-05-15 13:23:03
313
原创 【数据结构从菜鸟到大牛】双向带头循环链表的实现(代码附详细注释)
✨ 写在前面 🎃 哈喽大家好👋👋👋🌱 作为一个初入编程的大学生,知识浅薄🌱 写文章的同时也是在巩固自己,同时希望我的文章对你有所帮助!🌱 我的其他文章 1.【数据结构】时间复杂度&&空间复杂度 2.【数据结构】顺序表接口实现及详解 2.【数据结构】带你手撕单链表!🌱 初入编程的世界 前方"路漫漫"🛣️ 每天我们都要进步一点点💧🌱 希望分享知识的同时可以和你们一起进步🍻📇文章目录📜1📜2📜3📜4📜1📜2📜3📜4
2022-05-12 16:06:52
736
8
原创 【数据结构从菜鸟到大牛】链表(画图教你手撕单链表)
📑前言🌝顺序表优点之前我们学习了顺序表,其本质就是数组了解了顺序表是有自己的优点的:物理空间连续 下标随机访问我只要知道了首元素的地址,就可以访问顺序表的所有的元素😅顺序表缺点空间不够,需要扩容。扩容就有一定的性能消耗,其次一般扩容2倍,存在一些空间浪费 头部或者中间位置插入删除的效率低下,需要挪动---O(N),尾插尾删比较容易⚒️改善方案1.按需申请释放空间需要一个就申请一个 ,哪一个不用了我们就释放哪一个这样开辟的是一个一个的单独独立的空间,...
2022-04-30 14:32:22
2000
4
原创 【数据结构从菜鸟到大牛】 顺序表的实现
1.顺序表的概念以及结构顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构一般情况下采用数组存储。在数组上完成数据的增删查改顺序表要求数据必须从第一个位置开始连续存储的-(这里和数组是不同的)顺序表可以分为静态顺序表和动态顺序表1.1静态顺序表:这种静态顺序表的大小是写死的,存在很明显的缺陷:N不知道要定义多大,多了就会浪费,少了就不够所以一般采用动态的顺序表1.2动态顺序表...
2022-04-30 09:12:14
1108
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人