- 博客(20)
- 收藏
- 关注
原创 C++中的模板(初步)
比如:当用double类型使用函数模板时,编译器通过对实参类型的推演,将T确定为double类型,然后产生一份专门处理double类型的代码,对于字符类型也是如此。函数模板代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生函数的特定类型版本。对于同一个类 存放的数据类型可能不完全一样 比如存放double类型的栈 int类型的栈等。1.类必须显式实例化 类模板名字不是真正的类,而实例化的结果才是真正的类。比较低,只要有新类型出现时,就需要用户自己增加对应的函数。
2024-05-12 22:26:31 1430 1
原创 差分——前缀和的逆运算
读取的每一个a[i](就是相当于在原数组的区间[i][i]上都加了一个a[i]),相当于是在差分数组中对应的b[i]位置上加上了a[i] b[r+1]位置上减去了a[i] 所以不用考虑如何构建 直接无脑插入a[i]就行。b[i][j] += b[i-1][j]+b[i][j-1]-b[i-1][j-1](直接用原数组求前缀和就行 本质相同)核心公式:b[x1][x1]+=c b[x2+1][y1]-=c b[x1][y2+1]-=c b[x2+1][y2+1]+=c。
2024-05-09 13:50:09 218 1
原创 前缀和(某个范围内数据的和——数轴 矩阵)
公式推导及图解:https://www.acwing.com/solution/content/232751/O(nm)->O(max(n,m)) n是数组长度 m是查询次数 降低时间复杂度 提升效率。二维前缀和:O(nmq)->O(max(nm,q))因为查询是O(1) n行m列q个查询。一维前缀和: 下标必须从1开始 si = a1+a2+a3+...+ai s0 = 0。作用:快速求出原数组中一段数的和 [l,r] sr-s(l-1)全局变量自动初始化为0 局部变量为随机数。
2024-05-09 12:15:57 193 1
原创 高精度除法
先判断A>B 大的话最高位减 不能减了之后再加后面的位 直到所有位都减过了 注意j(b的位数)的变化 以及结果的高位低位 去除前导零。代码来源:https://www.acwing.com/solution/content/39062/高精度除法:模拟除的过程 得被除数(第一步不用得直接拿来)->得商->得余数 别忘删前导零。vector assign函数用法 (n,m)n个数值为m的数赋值给vector。或者把(first,end )左开右闭范围内的数据赋值给vector。
2024-05-08 19:38:07 266
原创 高精度乘法
高精度乘法:有两个思路 A[i]*b A*b[i](这个思路目测非常麻烦 不用)高精度乘高精度:模拟各个位的数相乘 模拟进位过程 初始化vector长度开两者长度之和。这么看的话 高精度乘低精度也能用这个方法算 就是时间长点。注意点:vector越界 乘法循环结束条件 前导0的删除。
2024-05-08 16:46:20 109
原创 高精度减法
高精度加法:模拟小学生加法 N 每次多+10是为了防止边界问题 低位在前 高位在后 最后(高)一位检查进位 没啥难度。高精度减法:大减小 借位的保留 前导0的删除(从存储上看是删后边)拓展:上面两个模板a b都是正整数 自己写了个高精度减法的。
2024-05-08 13:54:55 170
原创 类的构造函数的初始化列表及类的static成员
单参数构造函数支持隐式类型转换,如以下代码所示,直接将int类型变量2赋值给Date类型的对象d2也能通过编译。可以初始化const类型的成员变量,引用类型的成员变量,以及没有默认构造函数的自定义类型的成员变量。如果在函数体内赋初值会报错,只能在初始化的时候就指定他们的左值。虽然上述构造函数调用之后,对象中已经有了一个初始值,但是不能将其称为对对象中成员变量的初始化, 构造函数体中的语句只能将其称为。对于以下代码,如果Time类的构造函数的形参hour无缺省值,则会报错。因为初始化只能初始化一次,而。
2024-05-06 20:44:32 412
原创 运算符重载(包括3个类的默认成员函数)
/ 年int _month;// 月int _day;// 日d1.Print();d2.Print();当遇到以下代码的时候:成员函数的默认this指针是Date* 而d1是const Date*类型 会发生权限的放大,导致报错。所以我们要在函数名称后边加上一个const,相当于下图:避免了语法上的错误和权限的放大。
2024-05-06 13:39:44 605 1
原创 C++类中的默认成员函数之一:拷贝构造函数
1.拷贝构造函数的定义:只要自定义类型进行赋值操作 就会调用拷贝构造函数2.拷贝构造函数的特征:本质是默认构造函数的一个重载形式 只能有一个参数 还必须是引用!为什么必须是引用?因为传值会引发无穷递归(因为只要对自定义类型进行赋值操作 就会调用拷贝构造函数 不用引用也起不到避免开辟新空间 提升效率的目的)
2024-04-25 10:31:24 1618 1
原创 C++中类的默认成员函数之一:析构函数
如果类中没有申请资源时,析构函数可以不写,直接使用编译器生成的默认析构函数,比如Date类;有资源申请时,一定要写,否则会造成资源泄漏,比如Stack类。没有显式写析构函数,系统会默认生成 不会对内置类型的成员变量进行处理 如果有自定义类型的成员变量会对调用自定义类型的析构函数,保证自定义类型的销毁。这个是Stack的析构函数,目的是释放Stack申请堆中的动态资源,避免造成内存泄漏~,而不是实现对象本身的销毁,局部的对象本身的销毁是由编译器完成的。当对象的生命周期结束后,销毁对象中。
2024-03-27 19:22:25 343
原创 C++中的this关键字
3. this指针本质上是“成员函数”的形参,当对象调用成员函数时,将对象地址作为实参传递给this形参,所以对象中不存储this指针。我们可以看到 他们call的Print函数的地址都是一样的,所以类中的成员函数应该都是存放在同一块区域中,我们叫他们公共代码区。1. this指针的类型:类类型* const,即成员函数中,不能给this指针赋值,只能改变其指向的位置的内容的值。,刚才我们已经得到了类的成员函数存放在公共代码区的结论,那么我们的函数是如何知道打印对应对象的成员变量的呢?
2024-03-25 19:30:26 1663 1
原创 C++的auto关键字
/auto是一个新的类型指示符(占位符)来指示编译器,auto声明的变量必须由编译器在编译时期推导而得。return 10;auto b = a;//typeid(变量名).name() 打印变量类型//auto e;无法通过编译,使用auto定义变量时必须对其进行初始化//这也更加说明了auto是一种类型占位符 必须给他清晰明确的表达式赋值return 0;程序运行结果:由此我们可知 被auto关键字修饰的变量必须赋初值。
2024-03-24 15:29:14 176 1
原创 C语言版的文件操作看这一篇就足够了!详解~
而我们前面学习结构体时,写了通讯录的程序,当通讯录运行起来的时候,可以给通讯录中增加、删除数据,此时数据是存放在内存中,当程序退出的时候,通讯录中的数据自然就不存在了,等下次运行通讯 录程序的时候,数据又得重新录入,如果使用这样的通讯录就很难受。需要注意的是,fclose函数将形参中传递的文件指针指向的文件流关闭后,不会将其地址置空,所以pf指针还会访问到他所保存的内存中的地址,这是不安全的,会形成。文件的打开用fopen函数完成,他这个函数有两个参数,第一个参数是指文件的名称,第二个是指打开文件的方式。
2023-10-18 16:48:19 265 1
原创 数据在内存中的存储(C语言版本)!
我们如果要解释C语言的各类数据如何在内存中进行存储,就不得不介绍一下C语言的数据类型,C语言的数据类型可分为整型家族,浮点型家族,自定义家族,指针家族和空类型。 我们日常中常用的就是char int类型,他们分为:以上的形式,其中由于char字符类型的在内存中以ASCII码的形式存储,本质还是整型数据,所以也把它归为整型一类. 以上就是C语言中常见的类型的声明形式~ 各个类型有能够开辟内
2023-10-17 19:47:10 56
原创 指针进阶版本详解!关于指针高级用法看这一篇就够了!
数组指针是指针?还是数组?答案是:指针。我们已经熟悉:整形指针: int * pint;能够指向整形数据的指针。浮点型指针: float * pf;能够指向浮点型数据的指针。那数组指针应该是:能够指向数组的指针。那这个数组应该怎么用代码表示呢?答案是p2,p1表示的是一个叫做p1的数组,里面存放了10个指向int类型数据的指针变量而p2先和*结合,说明p2是一个指针变量,然后指向的是一个大小为10个整型的数组。所以p2是一个指针,指向一个数组,叫数组指针。
2023-10-14 17:30:30 245 1
原创 C语言结构体等自定义类型详解!看这一篇就够了!
由于数组只能保存同种类型的数据,为了帮助我们保存不同类型的数据,将他们整合在一起,用来描述一个对象,就有了结构体这样的概念。int x;int y;//定义时按照固定顺序直接赋值struct Stu//名字int age;int data;int b = 20;//按照固定顺序全部初始化struct Stu s2 = { .age=18, .name="如花"};//乱序全部初始化//定义时初始化一部分,后续乱序赋值。
2023-10-12 22:04:16 596
原创 前路漫漫亦灿灿——我的编程初心
2.温故而知新:用有道云笔记记下当天学过的新知识,之后不定时的复习,当学完一套体系后,及时编写博客并制作思维导图(我用的是xmind,大家有其他的可以推荐给我哦~);我目前的目标是每天都要认真学习编程,通过自己的坚持考取研究生,丰富自己的技术,向更高的学府迈进,认识更多的老师和大佬们,拿到满意的offer,走出自己人生的一条大道来。我最想去的公司就是字节跳动,做C++开发工程师,最后我希望和csdn的各位大佬们一起学习进步,也希望在csdn和大家一起见证我的学习之路,欢迎大家关注和评论!
2023-06-11 16:35:35 105
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人