- 博客(101)
- 收藏
- 关注
原创 笔试练习day4
链接WY22 Fibonacci数列这道题不是让我们求斐波那契数,而是让我们将一个数通过加或减的方式去让他变成一个斐波那契数,每次变化的绝对值为1,要求我们得到最小变化的次数我们以示例1为例子N=15时只需要求出他距离那个斐波那契数最近就可以了,比如15-13=2 21-15=6,显然15距离13最近,因此输出2当N=13的时候,距离应该是0,因为N就是斐波那契数所以我们得出了一个结论就是首先我们需要判断N是否是斐波那契数,如果是就返回0,如果不是那就说明N是在两个斐波那契数中间夹着的,我们只需要求
2024-08-12 08:00:00
1007
32
原创 笔试练习day3
链接添加链接描述这道题就是提取一句话中每个单词的首字母,并且将他们的首字母用大写的形式输出,这里的难点就在于每个单词是通过空格分隔开的,在输入的时候如果用scanf和cin直接输入的话会因为有空格而丢失后面的数据解决这个难点的第一个方法是用getline输入,getline输入是遇到’\n’才停止,也就是遇到回车键才结束,这样就不会因为有空格而丢失数据了,后面过程就是通过循环去找空格出现的位置,然后空格的下一个位置就是单词的首字母第二个方法就是用string去解决(这个解法就是通过循环直接往strin
2024-08-08 08:00:00
714
25
原创 笔试练习day2
链接BC64 牛牛的快递这道题和出租车那种是一个意思,首先要有一个起步价格,之后多出来的要额外收费,这样看起来就是一个一次函数的方程,y=kx+b+a,k=1是每千克收的钱,x是快递的重量(这里要注意x有小数的话要往整数进1),b=20表示的是起步价,而a就是是否加急的费用,不加急a=0,加急a=5我们需要先模拟一下这个过程,假设有akg,对于a来说有两种情况,一种是<=1,另一种是>1对于<=1这种情况比较简单,>1这种情况是要考虑a-1是否有小数,如果有小数就需要向上取整,比如1.1向上取整就是2
2024-08-04 08:49:34
1228
25
原创 笔试练习day1
链接BC153 [NOIP2010]数字统计这道题是统计2出现的次数,比如在[2,22]中,出现2的有,2,12,20,21,22,其中22中2出现了2次,所以要统计一个数中是否有多个2出现另外我们还需要分析题目给出的范围因为根据题目的信息我们可以得出是整形类型,int的数据范围是10^9,当题目给的数据范围超过这个的时候,我们要用longlong类型数字拆分这个方法比较常用,就是重复模10之后再除10拿22举例第一步:22%10我们就可以得到他个位的数字也就是2第二步:个位的数字拿到后,我们就
2024-07-30 08:52:43
837
20
原创 模拟string(四)详解
现代写法相对于传统写法在二插树 链表等场景优势比较明显因为树的节点如果用传统写法需要一个节点一个节点的开空间,然后再释放,而现代写法就是直接调用拷贝构造函数,然后就交换,并且省了自己去释放空间。
2024-07-27 11:28:59
1111
10
原创 模拟string(三)详解
因为返回的值是不允许被修改的,所以在后面加了个constsize_t capacity()const获取capacity代码char& operator[](size_t pos)获取pos位置字符这里有两个函数,因为有时候会遇到常量字符串,就是只能读取数据,但是不能修改,所以需要分两个函数来对待不同的情况const char& operator[](size_t pos) const获取pos位置字符(只能读取不能更改)代码我们加上断言可以防止访问越界,并且因为pos位置的空间是通过ne
2024-07-24 09:10:41
957
25
原创 模拟string(二)详解
void reserve(size_t n)我们需要先判断如果传入的n值是大于或等于_capacity时,就代表需要扩容,这里的扩容我们用new来扩容new扩容的方式就先用一个char*的tmp类型指针,然后new开辟一块空间,空间大小为n个字节因为new开辟的空间是没有数据的,所以我们需要将_str的数据拷贝过来,所以strcpy,然后拷贝之后释放掉原来的空间让_str指向tmp所指向的空间,之后更改_capacity的值void insert(size_t pos, char ch)字符前插错误写法
2024-07-21 10:22:26
703
19
原创 模拟string(一)详解
这里的错误是_str(nullptr),因为C++要对C语言进行兼容而有一个函数是下面这样的,返回指针如果返回的是空指针,然后我们将他打印,就会出现问题而我们用库里面的就不会出现问题指针初始化的时候不可以像下面这样因为在初始化的时候传入的指针可能会是下面这样的情况将常量字符串传入,导致在初始化后我们不能将str修改,并且不可以扩容所以正确写法是自己开空间拷贝数据这个顺序是不可以的,因为初始化列表的初始化顺序不是按实例化的顺序,而是按照声明的顺序初始化,这样就会导致_str在初始化的时候s
2024-07-18 07:00:00
850
14
原创 认识string(三)详解
这个函数在之前数据结构的文章中有模拟实现出来过,就是尾差,只不过这里的push_back是尾差字符append就是在当前string中的字符串里,追加一个字符串append有六个函数,和之前文章认识string(一)详解中的Construct string非常相似,所以就不介绍了这是他的一些例子operator+=其实就是结合了上面两个的功能assign的功能就是覆盖掉当前的字符串insert就是前插的意思,因为实现的函数比较多,所以就不演示了这是他的一些例子erase功能就是删除字符
2024-07-16 07:00:00
964
14
原创 认识string(二)详解
这两个其实是一样的,我们通常使用的是sizesize的英文解释:The number of bytes in the string.size_t is an unsigned integral type (the same as member type string::size_type).翻译:字符串size_t中的字节数是无符号整数类型(与成员类型string::size_type相同)。lenth的英文解释:The number of bytes in the string.size_t is an
2024-07-12 23:07:11
896
25
原创 认识string(一)详解
string文档(这个文档广告有点多)建议在看这个文档的时候用旧版本去看,因为旧版本支持搜索,想要进去旧版本就点击红色方框这个位置如果英语不好的可以点击翻译当前页面,但是有时候翻译会有一点问题,比如我们搜索printf函数,然后翻译当前页面后,就会出现下面这种情况,参数的说明符被翻译了而没有被翻译时是这样的所以最好是用英语去看C++的STL的容器是在reference的containers中string则是在reference的miscellaneous headers,如果sting实
2024-07-11 12:36:59
873
22
原创 C/C++内存管理
下面是C语言对自定义类型的一些写法int val;下面是C++的写法int _val;new开空间是会调用malloc,但是直接去调malloc开辟失败了会返回空,所以用operator new去封装malloc下面是调用的一些过程。
2024-07-08 08:00:00
1255
20
原创 类和对象深入理解
声明为static的类成员称为类的静态成员,用static修饰的成员变量,称之为静态成员变量用static修饰的成员函数,称之为静态成员函数。静态成员变量一定要在类外进行初始化面试题:实现一个类,计算程序中创建出了多少个类对象。这里的n就是一个静态全局变量,注意静态变量是不能给缺省值的,因为他不是单独属于某一个对象,而是属于这个类的所有对象,因此需要在类外面定义由于n受域作用限定符的限制,当我们屏蔽掉private后就可以访问n了我们再来看看下面的三段代码上面的三个代码中ptr输出的n的值是
2024-07-06 08:53:28
943
19
原创 构造函数深入理解
int _month;int _day=2;int& _ref;A _aa;return 0;现在有一个自定义类型A,将A_aa的声明放在Date的成员声明里,但是A_aa没有在Date的初始化列表当中定义,那A_aa会不会被定义呢?我们需要理解下面这句话。
2024-07-04 10:37:20
999
23
原创 运算符重载(下)
前置++是先++再使用后置++是先使用再++用operator实现前置和后置++感觉非常难因为operator++只能实现这两个的其中一个功能,为了解决这个问题就需要让operator可以特殊处理为了让operator++可以进行区分,可以让其中的一个operator++强行增加一个int参数构成重载来区分注意这里的int是被规定的所以Date& Date::operator++()表示前置++,Date Date::operator++(int )表示后置++,编译器会自动识别因为前置++要求的
2024-05-30 08:00:00
802
31
原创 运算符重载(上)
C++为了增强代码的可读性引入了运算符重载运算符重载是具有特殊函数名的函数,也具有其返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通的函数类似。函数名字为:关键字operator后面接需要重载的运算符符号。函数原型:返回值类型 operator操作符(参数列表)注意:不能通过连接其他符号来创建新的操作符(可以连接C/C++语法中存在的操作符):比如operator@重载操作符必须有一个类类型参数,不能去重载运算符改变内置类型的行为用于内置类型的运算符,其含义不能改变,例如:内置的
2024-05-25 09:14:12
1019
35
原创 拷贝函数详解
拷贝构造我们经常在使用,需要拷贝时我们Ctrl C ,构造时就Ctrl V拷贝构造函数:只有单个形参,该形参是对本类类型对象的引用(一般常用const修饰),在用已存在的类类型对象创建新对象时由编译器自动调用。拷贝构造函数也是特殊的成员函数,其特征如下:拷贝构造函数是构造函数的一个重载形式。拷贝构造函数的参数只有一个且必须是类类型对象的引用,使用传值方式编译器直接报错,因为会引发无穷递归调用。若未显式定义,编译器会生成默认的拷贝构造函数。 默认的拷贝构造函数对象按内置类型成员内存存储按字节序完成拷贝,这
2024-05-20 09:05:25
852
35
原创 析构函数详解
通过上一篇文章我们知道一个对象是怎么来的,那一个对象又是怎么没呢的?析构函数:与构造函数功能相反,析构函数不是完成对对象本身的销毁,局部对象销毁工作是由编译器完成的。而对象在销毁时会自动调用析构函数,完成对象中资源的清理工作(有点像数据结构中的Destroy函数,作用就是清理链表 树 或堆上的空间清理,如果不清理会出现内存泄漏的情况)注意对象空间的开辟和销毁不需要我们去解决,这些都是由系统去完成的(全局 对象 静态都是系统自己去解决),而像堆上的空间就需要我们去完成了,比如malloc开辟空间的时候需要我
2024-05-16 09:00:00
996
33
原创 构造函数详解
函数名与类名相同。无返回值(不是像void,是根本不需要写返回类型)对象实例化时编译器自动调用对应的构造函数。构造函数可以重载。如果类中没有显式定义构造函数,则C++编译器会自动生成一个无参的默认构造函数,一旦用户显式定义编译器将不再生成编译器生产的默认构造函数有时并没有初始化这是因为C++将数据类型分为内置类型和自定义类型内置类型的含义就是语言自身定义的类型,比如int/char/double/指针…自定义类型就是自己定义的一些类型,比如struct/class。
2024-05-13 07:53:56
1056
26
原创 this指针详解
我们先来看看下面的代码结果如下对应 d1.Print()和 d2.Print()在上一篇文章中就已经讲过他们都是访问的同一个函数,因为print是在一块公共区域里并且print中的_year _month _day并不是类声明的成员变量,因为上一篇文章提到过,成员变量_year _month _day只是声明,并没有占用空间,因此如果把这些没有占用空间的成员变量打印出来是做不到的所以print函数打印的是定义出来的成员变量,也就是初始化后的成员变量而Init 与 Print 两个成员函数,函数体中没
2024-05-11 08:47:27
920
20
原创 C++类的概念以及用法
/ 类体:由成员函数和成员变量组成 };// 一定要注意后面的分号class为定义类的关键字,ClassName为类的名字,{}中为类的主体(注意类定义结束时后面分号不能省略)类体中内容称为类的成员:类中的变量称为类的属性或成员变量(一般情况下类的成员变量都是私有的,因为不希望有人直接去修改成员变量,一般都是通过成员函数去修改,但是这个不是强制要求的)类中的函数称为类的方法或者成员函数。注意:成员函数如果在类中定义,编译器可能会将其当成内联函数处理private:int* a;
2024-05-09 09:00:00
640
25
原创 C++入门基础(四)
当在同一行声明多个变量时,这些变量必须是相同的类型,否则编译器将会报错,因为编译器实际只对第一个类型进行推导,然后用推导出来的类型定义其他变量。
2024-05-07 09:00:00
1888
26
原创 C++入门基础(三)
比如:同学A有一个别名为张三,张三是同学A,张三和同学A指的都是同一个人,在C++中同学A可能是int类型,也可能是char类型,甚至可能是int*类型或int**类型…
2024-05-03 10:33:22
808
22
原创 C++入门基础(二)
/.h文件// .cpp文件代码运行后会报错,重复默认参数,因为a和b在.h文件和.cpp文件中的缺省参数值不同起了冲突如果.h文件和.cpp文件缺省参数值都相同时//.h文件// .cpp文件那如果.h文件中我们不用缺省参数,而.cpp用缺省参数会怎么样.h文件.cpp文件这次只让.h文件用缺省参数.h文件.cpp文件。
2024-05-01 08:35:58
961
21
原创 C++入门基础(一)
定义命名空间,需要使用到namespace(名字空间)关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。
2024-04-27 09:00:49
737
31
原创 栈和队列详解
如果遇到函数参数需要传入多个二级指针,那么我们可以用结构体将他们封装起来,结构体封装的成员就是二级指针的值,然后通过结构体访问成员将他们修改,并且在传参时我们只需要传入结构体的地址即可。
2024-04-24 20:36:14
684
25
原创 C语言复习文章链接
3:strncmp(Compare characters of two strings)函数的使用。2:strncat(Append characters from string)函数的使用。5:strcat(Concatenate strings)的使用和模拟实现。6:strcmp(Compare two strings)的使用和模拟实现。4:strstr(Locate substring)的使用和模拟实现。4:strcpy(Copy string)的使用和模拟实现。
2024-04-21 14:05:08
1159
12
原创 双向链表详解
🐒🐒🐒🥸🥸🥸🐿️🐿️🐿️🐣🐣🐣🐓🐓🐓以下我写的一些文章,如果在阅读这篇文章过程中有疑惑的可以看一下malloc free等函数的用法free空间等一些问题计算结构体内存大小的方法计算结构体内存大小的方法结构体的用法指针的用法指针的用法,以及野指针问题,和assert用法二级指针。
2024-04-18 08:24:06
967
28
原创 单链表详解
如果我们把struct SListNode* next的*去掉,就会报错此外这里有一个问题,如何计算上面链表中一个节点所占用内存的空间,这就涉及到结构占用内存的计算,在我之前的文章中有讲过。
2024-04-12 18:12:53
1042
36
原创 常用快捷键整理
编译.编译程序:Ctrl + F7运行.运行程序:Ctrl + F5调试.打断点:F9调试.启动调试并运行到断点位置:F5调试.单步执行:F10调试.单步进入函数:F11调试.结束调试:Shift +F5调试.清除所有断点 CTRL + SHIFT + F9 清除项目中的所有断点。调试.SHIFT + F11跳出执行当前执行点所处函数的剩余行。编辑.删除行Ctrl + Shift + L删除所有选定行;如果没有选定行,则删除当前行。编辑.转换为大写Ctrl + Shift + U编辑.转
2024-03-24 13:05:04
365
4
原创 时间复杂度和空间复杂度详解
如何衡量一个算法的好坏呢?比如对于以下斐波那契数列斐波那契数列的递归实现方式非常简洁,但是他的复杂度较高而什么是复杂度呢?算法在编写成可执行程序后,运行时需要耗费时间资源和空间(内存)资源 。因此衡量一个算法的好坏,一般是从时间和空间两个维度来衡量的,即时间复杂度和空间复杂度。时间复杂度主要衡量一个算法的运行快慢,而空间复杂度主要衡量一个算法运行所需要的额外空间。比如我们实现循环时,循环内部又嵌套了许多循环这样的代码时间复杂度就很高同样的,空间复杂度就是我们创建了很大变量,在创建的过程中他会占用内存
2024-03-18 13:07:48
1086
40
原创 文件操作(下)
fputc的详细介绍函数格式 int fputc ( int character, FILE * stream );最开始打开文件时,文件里什么都没有,但是文件的指针是指向这个文件的启始位置(这个指针是一个状态指针,不是pf,具体为什么我也不知道,可能pf只是为了找到这个文件的位置,然后再通过这个状态指针将字符输出)之后fputc将字符’j’输出进文件,然后文件指针会跳到下一个,然后再分别将字符’a’‘c’'k’输出(注意这里的pf是不变的)最后再将文件关闭保存。
2024-03-08 19:23:00
1014
38
原创 C语言指针基础题(二)
写一个函数打印arr数组的内容,不使用数组下标,使用指针。arr是一个整形一维数组这道题的核心就在于数组名是数组首元素地址,也就是*(arr+1)=arr[1]方法一方法二例题二写一个函数,可以逆序一个字符串的内容方法一这个方法其实就是找到字符串中左右字符的地址,通过解引用实现交换注意:如果是在线OJ时,必须要考虑循环输入,因为每个算法可能有多组测试用例进行验证,参考以下main函数写法方法二关于memset的实现在之前C语言内存函数有写过用C语言在屏幕上输出以下图案:这是一个对称图形,其中
2023-12-13 20:40:11
1644
39
原创 C语言指针基础题(一)
以下系统中,int类型占几个字节,指针占几个字节,操作系统可以使用的最大内存空间是多大:( )A.32位下:4,4,2^32 64位下:8,8,2^64B.32位下:4,4,不限制 64位下:4,8,不限制C.32位下:4,4,2^32 64位下:4,8,2^64D.32位下:4,4,2^32 64位下:4,4,2^6432位系统下:int占4个字节,指针表示地址空间个数,总共有2^32个,故占4个字节64位系统下:int占4个字节,指针表示地址空间个数,总共有2^64个,故占8个字节注
2023-12-10 17:54:45
1209
33
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人