自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(16)
  • 收藏
  • 关注

原创 KMP模版(C++,自用)

【代码】KMP模版(C++,自用)

2024-01-16 15:44:04 403

原创 如何快速区间合并?C++

给定一些区间,输出这些区间整体的区间范围。比如:有区间 [ 1 , 2 ] [ 1 , 3 ] [ 2 , 4 ] [ 5 , 6 ] [ 6 , 8 ]那么合并后的区间就是 [ 1 , 4 ] [ 5 , 8 ]

2023-12-21 19:28:13 123

原创 离散化算法

当给定的数据的值域非常大,但是数据的个数比较小时,可以用 “离散化” 来映射。比如:有 n 个数据,每个数据的范围是 -10^9 ~ 10^9 ,那我们不可能开这么大的数组来记录它们然而 n 的大小是 0 ~ 10^5 ,也就是说:实际用到的空间只有 0 ~ 10^5 左右。说人话就是:在 -10^9 ~ 10^9 个空格内,选 10^5 个数填入。那中间就会有很多的空格没有填入从而浪费空间(事实上也不可能开 -10^9 ~ 10^9 这么大的数组)。

2023-12-21 14:10:57 182

原创 堆(一维数组实现)

包括堆的一些基本操作和堆排序都有,都在注释里。可以用一个一维数组模拟堆,注释写的很详细。下面只以小根堆为例,大根堆也是同理。

2023-10-09 22:14:30 78 1

原创 C++ 运算符重载(超详细)

下面说明为什么:如果cout写在后面,也是可以的,但是想要输出p,我们就要这么写:p << cout,两者的顺序要反一下,同理,用成员函数重载的话,cout就一定在p后面了。

2023-09-11 16:17:14 2976

原创 C++ 友元详解

2、的解释:因为编译器是从上到下编译的,若Gay放在House后面,那么在读到 “友元声明” 的时候(friend void Gay::visit( ))Gay类都还没创建呢,所以会报错。比如上面的 Gay类(成员函数所在的类)一定要放在 House类(访问的类)前面!私有权限 private: 类内可以访问,类外不能访问,儿子不能访问父亲。类做友元,则类中 所有的成员函数 都可以访问某个类的私有属性,2、成员函数所在的那个类,一定要放在所访问的类的前面!,令其可以访问另一个类中的。

2023-09-07 21:47:26 70 1

原创 C++ 常函数、常对象

类内成员函数后加 const 就是常函数对象前加 const 就是常对象。

2023-09-07 14:59:06 70 1

原创 C++ 类:空指针访问成员函数

我们知道 this指针 指向的是调用了成员函数的对象,然而我们并没有创建对象,而是创建了一个可以指向对象的指针p,那么 this指针 的指向就会等于 p指针 的指向,也就是空。一个空指针,怎么能有 this -> m_age 这样的操作呢?成员函数(非静态)都隐含了this指针,而 func_2( )内部调用了成员变量,所以实际上它内部的代码应该是这样的:cout << this -> m_age << endl;2、但若调用的成员函数使用了this指针(即函数内部调用了成员变量),就会出错。

2023-09-07 10:30:10 503 1

原创 C++ this指针详解

首先我们要知道:this指针是在类内 非静态成员函数 所有的,静态成员函数 没有this指针this指针不需要定义,直接使用即可。

2023-09-06 21:43:44 117 1

原创 C++类静态成员变量、静态成员函数

编译器不知道其中的 普通成员变量 m_age 到底是属于p1的还是p2的,因为没有 this指针。但是 m_birthday 就不会有这个问题,因为静态成员变量只有一份数据,不用考虑属于谁。用 类名::变量名 的方式就可以直接访问静态成员变量。当调用静态成员函数时:p1.func( );比如上面的代码,假如我创建2个对象:Person p1,p2;ps:普通成员变量只能通过对象进行访问。2、在类内声明,一定要在。3、可以通过类名直接访问。1、通过对象进行访问。2、通过类名进行访问。

2023-09-06 19:10:34 48 1

原创 C++类对象作为类成员

当我们实例化一个人类对象的时候,是先有车对象 还是先有人对象?例:定义一个车类,再定义一个人类,在人类中创建一个车类的对象。当程序结束的时候,是先释放车对象的内存 还是人对象?创建人对象时,车和人的 构造函数 谁先调用。销毁人对象时,车和人的 析构函数 谁先调用。先调用对象成员的构造,再调用本类构造。当类对象作为类成员时,称为。析构顺序与构造顺序相反。

2023-09-06 15:27:18 54 1

原创 C++拷贝构造函数详解(浅拷贝、深拷贝)

我们知道:在函数中定义的局部对象,存储在内存中的栈区,在函数调用后被系统释放。所以当我们试图返回局部对象时,系统会拷贝一份局部对象的副本,然后返回这个副本,因为对象主体会在函数调用后释放。首先我们要知道:当我们创建一个类时,系统会自动为其添加一个默认拷贝构造函数,这个函数默认拷贝对象的所以属性,并且是以 “浅拷贝” 的方式实现。2、我们在类中自定义 有参构造函数 和 析构函数,使用系统给的 默认拷贝构造函数,它执行的是浅拷贝的操作。tips:值传递的本质是复制一份传入实参的副本,形参所用的就是这个副本。

2023-09-06 14:47:13 211 1

原创 C/C++指针常量和常量指针

要是记不住可以试试:用 * 代表指针,用 const 代表常量 (数据类型和指针通常粘在一起)“指针常量” 就是 先指针后常量:int* const p = &a;“常量指针” 就是 先常量后指针:const int* p = &a;哪个在前就是哪个不可变“指针常量”:指针在前,即指针的指向不可改变“常量指针”:常量在前,即数据值不可改变。

2023-09-05 21:41:41 51

原创 C++引用详解

目的:给变量取别名语法:数据类型 & 别名 = 原名特点1、引用必须初始化,不存在空引用2、引用一旦初始化,指向就不可改变比如:b已经是a的别名,就不能改成是c的别名3、引用指向的必须是一块合法的内存空间本质:是一个指针常量这也说明了 为什么引用一旦初始化就不可改变指向

2023-09-05 21:06:59 35

原创 C++构造函数和析构函数

构造函数语法:类名(){ }主要目的:给对象初始化特点1、没有数据类型,也没有返回值2、函数名 == 类名3、构造函数可以有参数,一个类可以有多个构造函数,可以发生重载4、程序在创建对象时自动调用构造函数,而且只调用一次析构函数语法:~类名(){ }主要目的:清理对象,释放内存特点1、没有数据类型,也没有返回值2、函数名 == ~类名 (在类名前加~)3、析构函数不能有参数,一个类只有一个析构函数4、程序在对象销毁前自动调用析构函数,而且只调用一次

2023-09-05 14:41:40 64

原创 C++类成员变量和成员函数在内存上的区别

非静态成员变量:属于对象,随着对象的建立而分配内存,全局对象和静态对象则存储在全局区,局部对象则存储在栈区,动态对象则存储在堆区。静态成员变量:属于类,存储在全局区。非静态成员函数:属于类,存储在代码区。静态成员函数:属于类,存储在代码区。

2023-09-04 22:00:17 91

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除