- 博客(39)
- 收藏
- 关注
原创 C++|面试准备二(常考)
在公有继承链里,把基类的析构函数声明成虚函数是为了保证在通过基类指针或引用删除派生类对象时,能正确调用派生类和基类的析构函数,避免内存泄漏。(2)如果一个类不会被继承,把它的析构函数声明为虚函数通常是不好的做法,原因如下:性能开销:虚函数调用需要通过虚函数表来实现,这会带来额外的时间和空间开销。虚函数表是一个存储类的虚函数地址的数组,每个包含虚函数的对象都会有一个指向虚函数表的指针,这会增加对象的大小。代码复杂度:虚函数会让代码变得更复杂,增加了理解和维护的难度。所以,若一个类不会被继承,不应该把它的析构函
2025-03-24 14:48:54
989
原创 C++面试准备一(常考)
通过定义抽象类,可以明确地指定一个类应该提供哪些功能,即定义了一个接口。这使得其他类在实现这个接口时,必须遵循一定的规范,实现特定的方法或属性。这有助于保证代码的清晰性和一致性,使得不同开发者之间的合作更加顺畅。sizeof(指针)在32位平台4字节,64位平台8字节;sizeof(引用)就是求这个变量本身的字节数.
2025-03-22 21:05:54
867
原创 Linux|fork命令及其使用的写时拷贝技术
printf在计算机科学中,命令解释器Shell俗称壳(用来区别于核),是指“为使用者提供操作界面”的软件(command interpreter,命令解析器)。它类似于DOS下的COMMAND.COM和后来的cmd.exe。它接收用户命令,然后调用相应的应用程序。我们就是通过命令解释器(称为shell)(bash是命令解释器中的一种)和内核和系统进行交互的(Windows通过图形界面进行交互的);例如我们把ls交给bash,bash帮我们运行ls,然后把结果给用户;回归正题——fork。
2025-03-20 20:17:35
1281
2
原创 C++|对象的拷贝构造和赋值
如果类的数据成员有指针,则一定要实现如下函数●构造函数 (如果没有,会出现野指针)●拷贝构造函数 (如果没有,会出现浅拷贝)●重载 = 符号 (如果没有,会出现浅拷贝)●析构函数 (如果没有,会出现内存泄漏)
2025-03-19 17:39:16
257
1
原创 Linux|静态库 共享库
认识静态库和共享库,首先要了解什么是库:库是一组预先编译好的方法的集合,在Linux系统中,存储库的位置一般在/lib 和 /usr/lib (64位系统:/usr/lib64),库的头文件放在/usr/include。库分为静态库(后缀名.a)和共享库(后缀名.so)
2025-03-18 10:59:54
719
原创 C++|this指针
this 指针是一个隐含于每一个成员函数中的特殊指针。当对一个对象调用成员函数时,编译程序先将对象的地址赋予this指针,然后调用成员函数。每次成员函数存取数据成员时,C++编译器将根据 this 指针所指向的对象来确定应该引用哪一个对象的数据成员。每个成员函数(包括构造函数和析构函数)都有一个this指针。可以理解为一个中间过渡工具,通常this指针在系统中是隐含存在的,也可以把它显式表示出来。中,参数名和成员变量名相同,为了区分它们,使用。,即返回当前对象的引用。来访问调用该函数的对象的成员变量。
2025-03-17 14:22:31
163
原创 C++|对象数组和对象指针
因为类本质上也是一种数据类型,所以定义对象数组、使用对象数组的方法与基本数据类型相似,系统为对象数组分配适合的内存空间,以存放数组中的每个对象,同时还为每个对象自动调用匹配的构造函数完成数组内每个对象的初始化工作,但数组结束时会自动调用每个对象的析构函数。 声明对象数组的格式为:类名 数组名[数组长度];对象数组通过下标访问具体对象访问具体对象的数据成员的格式为:数组名[下标].数据成员;//必须有访问权限访问具体对象的成员函数的格式为:数组名[下标].成员函数(实参列表);//必须有访问权限数组对象,构造
2025-03-17 13:44:38
153
原创 C++|构造函数和析构函数
在C++11中允许在类定义时对成员变量初始化。class Apublic:A(){ }private://类定义时初始化int m_b;//没有初始化int main()A a;a.show();return 0;如果在构造函数中也有赋值,以赋值的为准,这个就和普通变量一样,初始化的值会被后面的赋值覆盖。
2025-03-16 23:15:19
1147
原创 C++|类和对象
public 声明成员为公有成员。完全公开。都可以访问。private声明成员为私有成员。该级别的成员只能被它所在类中的成员函数和该类的友元函数访问。protected声明成员为保护成员。具有这个访问控制级别的成员,外界是无法直接访问的。它只能被它所在类及从该类派生的子类的成员函数及友元函数访问。
2025-03-16 22:06:41
462
原创 C++|空指针nullptr
作为一种特殊的值,与其他正常的数值、字符或对象值区分开来,使得程序能够明确地区分有效数据和无效数据,便于进行各种逻辑判断和处理。通常被定义为一个值为 0 的常量表达式,用来表示指针不指向任何有效的内存地址。它是一种特殊的空引用,与 C 和 C++ 中的。时,对其进行解引用操作会导致程序崩溃,这有助于在开发过程中及时发现潜在的问题,提高程序的稳定性和安全性。表示字段值的缺失,与空字符串或 0 等其他值有不同的语义,有助于正确地处理和分析数据。是一个特殊的对象,用于表示空值或缺少值的概念,类似于其他语言中的。
2025-03-16 20:28:10
314
原创 C++|范围for
变量:定义一个变量,用于在每次循环迭代中存储序列中的一个元素。该变量的类型应该与序列中元素的类型兼容,也可以使用。序列:表示要遍历的序列,可以是{}初始化列表、数组、C++11新引入的for语句,可遍历stl容器。等容器,也可以是返回迭代器对的对象。关键字让编译器自动推导元素类型。2.遍历string。3.遍历vector。
2025-03-16 20:24:39
129
原创 C++|列表初始化
窄化转换(收缩转换):窄化(收缩)转换是指将一个较大范围的数据类型转换为较小范围的数据类型,而可能导致数据丢失或精度降低的转换。{}空初始化列表时使用默认值进行初始化,例如int型默认为0,double型默认为0.0,指针默认为nullptr(空指针)。通过这种方式,列表初始化可以在编译阶段就发现潜在的数据丢失问题,帮助开发者编写出更健壮的代码。初始化可能会被视为创建一个包含单个元素的初始化列表,而不是将该元素的值赋给变量。列表初始化即使用{}初始化,可在编译时自动识别数据窄化转换(收缩转换)。
2025-03-16 19:04:39
198
原创 蓝桥杯97k倍区间
定义前缀和sum存储前 i 项的和,某段子序列 Ai 到 Aj 的和即为 sum[j] - sum[i-1]利用同余定理:如果 (sum[j] - sum[i-1])%的所有前缀和两两组合,都可以构成一个 K 倍区间,这样的。即判断sum[j] - sum[i]是否为k的倍数。的和一定是 K 的倍数。运用数学优化思路,避免双层循环导致超时。次,那么对于任意两个前缀和。,如果它们的余数相同,即。即统计每个前缀和除以k的。
2025-03-09 23:55:14
126
原创 力扣 21.合并两个有序链表
思路:因为题目示例中没有头结点,创建头指针确定头结点,创建尾指针处理比较后剩余的单一链表,分别遍历两个链表,并用循环逐一比较。
2025-03-09 16:44:27
149
原创 力扣 LCR 084.全排列||
next_permutation,可对数据进行全排列,调用这个函数,可获取下一组排列值,数据全部排列完成后返回false。利用C++标准库中的vector容器和全排列函数next_permutation很方便。遍历排序前先sort快排成有序。
2025-03-09 16:17:21
176
原创 蓝桥杯题库1259奇怪的捐赠
新思路:类比求十进制下的123456中1,10,100,1000,10000,100000的份数, 即各位上的数字相加,取余再丢位,因此可以把100万转换成7进制,再逐位取数字得到最多份数。原本用笨办法嵌套循环+判断,做不出来。
2025-03-03 15:35:41
214
原创 数据结构|链表 刷题 250302--2
快指针走到环入口需要走m的距离,而慢指针从相遇点出发,因为m+n=c×(y−2x),所以慢指针走m的距离后也会到达环入口(因为m的距离和相遇点到环入口的距离n的关系满足上述等式)思路:两个快慢指针p q ,求出相遇点,然后q从头出发,p从相遇点出发,同频,p q一定会在入环点再次相遇。数学证明:相遇时,慢指针 p走了m+n+c*x(x为圈数),快指针q走了m+n+c*y(y圈)因为快指针速度为慢指针2倍,得到等式2*(m+n+c*x)=m+n+c*y。化简得到m=c*(y-2x)-n。
2025-03-02 23:55:11
306
原创 数据结构|链表 刷题 250302--1
想要通过函数的某个参数带出某个链表结点的地址,可借助指针的指针或者引用的方式达成。要有交点肯定成Y字型,不可能交叉,因为链表只能有一个前驱一个后继。
2025-03-02 23:29:57
136
原创 数据结构——编程实现中缀表达式转成后缀表达式
计算机运算过程:计算机逐个遍历,直到遍历到运算符,遍历到运算符后将该运算符的前两个操作数(双目运算符)进行运算。3 4 2 *+2 1 1 +/ -5+下一步为3 8 + 2 2 / - 5 +举例:3+4*2-2/(1+1)+5=3+8-1+5=15。转成后缀表达式为:3 4 2 *+2 1 1 +/ -5+后缀表达式:运算符在操作数的后面 例如3 4+,3 4*中缀表达式:运算符在操作数中间 例如3+4,3*4。中缀表达式 :3+4*2-2/(1+1)+5。把运算符放在对应括号的后面。
2024-12-05 16:54:41
723
原创 蓝桥杯题库练习19698报数游戏
这里,[n/20]是 20 的倍数的数量,[n/24]是 2424 的倍数的数量,[n/120]是 20和 24的最小公倍数 120的倍数的数量(因为这些数被计算了两次)。我们可以使用公式来计算在某个数字 nn 之前有多少个 2020 或 2424 的倍数。通过二分查找,我们可以在 1到 202420242024×24之间快速找到第 202420242024个倍数。用倍数循环也会超时T—T。
2024-11-05 16:19:03
283
原创 蓝桥杯题库练习19709好数
判断当前是奇数位还是偶数位类似,定义一个变量t,初始化为1,1为奇数表示个位是奇数位,通过变量t++,可实现偶数位为偶数,奇数位为奇数。判断好数,关键在于判断当前位数的奇偶和该位数字的奇偶是否一致。判断该位数字的奇偶很简单,对2取余再丢个位取个位即可。
2024-11-04 18:30:46
162
原创 蓝桥杯题库练习19695握手问题
一共50人,假设全部都握手了,每人握手49次,总握手次数为50*49/2。但其中7人彼此间没有握手,减去这7人彼此间全部握手的次数。
2024-11-03 18:58:17
262
原创 蓝桥杯题库练习19847运动饮料和矿泉水
N为偶数时,举例发现红色优先取水可每次都取得能量饮料,最多瓶数为N/2。以红色蓝色区分,红色为优先取水,以1、0分别代表能量饮料和矿泉水。N为奇数时,红色优先取水最多可取得1瓶能量饮料。考虑N分为奇数和偶数两种情况;
2024-11-03 18:51:30
238
原创 蓝桥杯题库练习3500阶乘求和
起得到的阶乘值会有多个末尾0,因为每个阶乘相乘过程中会有多个2、5因子(可以理解为2、5的倍数)相乘得到10,即在末尾增0。可以认为:阶乘的末尾零的数量取决于因子 5 的数量,因为因子 2 的数量总是超过因子 5 的数量。注意这里的因子5,是每多一个5,5,25(5*5),125(5*25)起有3个0,类推得20!在 0 到 999999999的范围内,确保每次的计算结果都是有效和准确的。溢出后得到的值将是不可预测的,通常是在该类型能够表达的最大值周围“绕回”到负数或小数,这导致后续的结果也是错误的。
2024-11-02 15:03:59
718
原创 位运算的应用
应用1.去掉最后一位右移一位2.在最后加个0左移一位3.在最后加个1左移一位再或1(x<<1)|14.把最后一位变成1x|15.把最后一位变成0(x>>1)<<16.把最后一位取反x^00000001tips:0^1=1;1^1=0 0^0=0;1^0=1总结:1和其他数字(1位)&时,该数字不变;0和其他数字(1位)&时,该数字变成01和其他数字(1位)| 时,该数字变成
2024-11-01 21:22:28
475
原创 蓝桥杯题库练习535统计数字
思路:先将数组排序,则相同的数可排在一起,再用循环遍历数组,当前数值与下一个数值相等则计数器++,不相等则返回当前数值及计数器的数值。使用库函数的排序函数sort(),该函数需要引用算法头文件。具体数据存储可用1.顺序表vector2.关联容器map。更快更直接得到某数字和它出现的次数。
2024-10-28 17:58:46
248
原创 蓝桥杯题库练习3814精打细算的小蓝
注意:容易部分测试用例过不去的点:1.避免超时,因为题目中n的数值范围很大,用i++逐个遍历很耗时。2.避免定义变量超出范围,统一定义为长整型变量。
2024-10-28 17:37:58
170
原创 蓝桥杯题库练习502成绩统计
输出时,%%—>%(第一个%为标识符),同时,为了满足输出要求,需要计算及格率、优秀率时保留一位小时用于四舍五入,再强转成整型。解题思路:用一层循环遍历n个成绩,重点关注输出要求为xx%(换行)xx%,且要求四舍五入保留整数。*注意题目的输入输出。
2024-10-22 15:21:13
226
原创 蓝桥杯题库练习1562完全日期
写给自己:对于各月份的天数,可以直接创建数组存放具体天数,不要依靠循环条件判断。特殊考虑闰年的2月为29天,可以另外写一个bool类型函数判断是否为闰年。解题思路:将年份,月份,日期各数字拆开相加,运用/ %逐位取数字。
2024-10-17 16:41:02
194
原创 蓝桥杯练习1443卡片
题目给出各数字的卡片数,并且判断代码结束的依据为卡片数不足,可以设置一个数组保存各数字的卡片数 方便后续if条件判断。循环过程中,结束条件未知(即最大拼成数未知),可以设为空,借助赋值变量n存放当前运行结果。*其中的arr[n%10]可以表示出数字n的个位运用的哪张卡片(0~9)
2024-10-16 12:39:00
166
原创 蓝桥杯题库练习593.既约分数
解题思路:写一个子函数来求分子分母的最大公约数,在主函数中使用双层循环求既约分数个数。例如a=15,b=10,若a%b==0,则b为a,b的最大公约数,=0,令a=b,b=a%b,递归求解的最大公约数。
2024-10-15 17:21:30
167
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人