- 博客(38)
- 收藏
- 关注
原创 C++模板初阶
class 类模板名// 类内成员定义// 类模版public:_size = 0;// 模版不建议声明和定义分离到两个文件.h 和.cpp会出现链接错误,具体原因后面会讲// 扩容++_size;
2024-08-19 00:38:31
717
原创 数据内存分布与管理
栈又叫堆栈--非静态局部变量/函数参数/返回值等等,栈是向下增长的,内存由系统自动分配,自动释放,分配的位置和大小无法主动控制。内存映射段是高效的I/O映射方式,用于装载一个共享的动态内存库。用户可使用系统接口。创建共享共享内存,做进程间通信。堆用于程序运行时动态内存分配,堆是可以上增长的,主动申请和释放,new,malloc等函数分配内存数据段--存储全局数据和静态数据。代码段--可执行的代码/只读常量。1.1.2 效率栈:windows 下系统预留栈的空间一般为2M,只要申请的内存大小小于剩余
2024-08-16 16:38:49
555
原创 类和对象(三)
• 之前我们实现构造函数时,初始化成员变量主要使⽤函数体内赋值,构造函数初始化还有⼀种⽅式,就是初始化列表,初始化列表的使⽤⽅式是以⼀个冒号开始,接着是⼀个以逗号分隔的数据成员列表,每个"成员变量"后⾯跟⼀个放在括号中的初始值或表达式。• 每个成员变量在初始化列表中只能出现⼀次,语法理解上初始化列表可以认为是每个成员变量定义初始化的地⽅。• 引⽤成员变量,const成员变量,没有默认构造的类类型变量,必须放在初始化列表位置进⾏初始化,否则会编译报错。
2024-08-10 00:14:50
435
原创 类和对象(二)
默认成员函数就是⽤⼾没有显式实现,编译器会⾃动⽣成的成员函数称为默认成员函数。⼀个类,我们不写的情况下编译器会默认⽣成以下6个默认成员函数,需要注意的是这6个中最重要的是前4个,最后两个取地址重载不重要,我们稍微了解⼀下即可。其次就是C++11以后还会增加两个默认成员函数,移动构造和移动赋值,这个我们后⾯再讲解。默认成员函数很重要,也⽐较复杂,我们要从两个⽅⾯去学习:• 第⼀:我们不写时,编译器默认⽣成的函数⾏为是什么,是否满⾜我们的需求。
2024-07-31 18:23:24
808
原创 类和对象(一)
• class为定义类的关键字,Stack为类的名字,{}中为类的主体,注意类定义结束时后⾯分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的⽅法或者成员函数。• 为了区分成员变量,⼀般习惯上成员变量会加⼀个特殊标识,如成员变量前⾯或者后⾯加_ 或者 m开头,注意C++中这个并不是强制的,只是⼀些惯例,具体看公司的要求。• C++中struct也可以定义类,C++兼容C中struct的⽤法,同时struct升级成了类,明显的变化是。
2024-07-29 21:56:36
918
原创 C++入门基础
• 定义命名空间,需要使⽤到namespace关键字,后⾯跟命名空间的名字,然后接⼀对{}即可,{}中即为命名空间的成员。命名空间中可以定义变量/函数/类型等。• namespace本质是定义出⼀个域,这个域跟全局域各⾃独⽴,不同的域可以定义同名变量,所以下⾯的rand不再冲突了。• C++中域有函数局部域,全局域,命名空间域,类域;域影响的是编译时语法查找⼀个变量/函数/类型出处(声明或定义)的逻辑,所有有了域隔离,名字冲突就解决了。局部域和全局域除了会影响。
2024-07-27 19:31:05
616
原创 快速/希尔/归并/选择/插入/堆/冒泡七大排序详解
1.直接选择排序思考非常好理解,但是效率不是很好。实际中很少使用2.时间复杂度:O(N^2)3.空间复杂度:O(1)4.稳定性:不稳定。
2024-07-04 17:08:47
773
原创 二叉树的实现(初阶数据结构)
一棵二叉树是结点的一个有限集合,该集合:1.或者为空2.由一个根结点加上两棵别称为左子树和右子树的二叉树组成从上图可以看出:1.二叉树不存在度大于2的结点2.二叉树的子树有左右之分,次序不能颠倒,因此二叉树是有序树。
2024-06-08 16:30:56
1404
1
原创 栈和队列详解
栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。栈中的数据元素遵守后进先出LIFO(Last In First Out)压栈:栈的插入操作叫做进栈/压栈/入栈,出栈:栈的删除操作叫做出栈,
2024-05-19 20:51:45
374
原创 链表面试题及其解析
实现一种算法,找出单向链表中倒数第 k 个节点。返回该节点的值。1->2->3->4->5 和k= 24给定的k保证是有效的。
2024-05-03 15:11:13
1036
原创 编译与链接
在ANSIC的任何一种实现中,存在两个不同的环境。第一种是翻译环境,在这个环境中源代码被转换为可执行的机器指令(二进制指令)。第二种是执行环境,它用于实际执行代码。
2024-04-05 13:20:42
648
原创 结构体自定义类型
1.位段的成员是int,unsigned int或signed int,在C99中位段成员的类型也可以选择其他类型。2.位段的成员名后边有一个冒号和一个数字。int _b : 5;
2024-03-24 14:11:20
874
原创 数据在内存中的存储
其实超过⼀个字节的数据在内存中存储的时候,就有存储顺序的问题,按照不同的存储顺序,我们分为⼤端字节序存储和⼩端字节序存储,下⾯是具体的概念:是指数据的低位字节内容保存在内存的⾼地址处,⽽数据的⾼位字节内容,保存在内存的低地址处。是指数据的低位字节内容保存在内存的低地址处,⽽数据的⾼位字节内容,保存在内存的⾼地址处。上述概念需要记住,⽅便分辨⼤⼩端。
2024-03-21 17:09:23
965
原创 C语言内存函数
• 函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内存位置。• 这个函数在遇到 '\0' 的时候并不会停下来。• 如果source和destination有任何的重叠,复制的结果都是未定义的。对于重叠的内存,交给memmove来处理。
2024-03-18 13:14:12
576
原创 字符函数以及字符串函数
• 字符串以 '\0' 作为结束标志,strlen函数返回的是在字符串中 '\0' 前⾯出现的字符个数(不包含 '\0' )。• 参数指向的字符串必须要以 '\0' 结束。• 注意函数的返回值为size_t,是⽆符号的( 易错 )• strlen的使⽤需要包含头⽂件• 学会strlen函数的模拟实现strlen的模拟实现。
2024-03-16 21:36:13
855
原创 深入理解指针(3)
在指针的类型中我们知道有一种指针类型为字符指针char*;代码const char* pstr = “hello bit.”;特别容易错把字符串hello bit放到字符指针pstr里了,但是本质是把字符串hello bit.首字符的地址放到了pstr中。上面代码的意思是把一个常量字符串的首字符h的地址存放到指针变量pstr中。
2024-03-10 11:20:40
1201
原创 深入理解指针(2)
这里我们使用&arr[0]的方式拿到了数组第一个元素的地址,但是其实数组名本来就是地址,而且是数组首元素的地址。输出结果:我们发现数组名和数组首元素的地址打印出的结果一模一样,数组名就是数组首元素(第一个元素)的地址。如果数组名是数组首元素的地址,那下面的代码怎么理解呢?输出的结果是:40,如果arr是数组⾸元素的地址,那输出应该的应该是4/8才对。
2024-03-09 22:49:08
1067
原创 深入理解指针(1)
在CPU处理数据的时候,需要的数据是在内存中读取,处理后的数据也会放回内存中,把内存划分为一个个的内存单元,每个内存单元的大小取1个字节,每个内存单元都有一个编号,有了这个内存单元的编号,CPU就可以快速找到一个内存空间,我们把内存单元的编号称为地址所以可以理解为:内存单元的编号==地址==指针。
2024-03-09 17:02:15
883
原创 写一段代码使用qsort来排序数据同时模仿qsort来实现一个冒泡排序的函数,这个函数可以排列任何类型的数据
int(*compar)(const void*,const void*))//函数指针,指向的就是两个元素的比较函数。size_t num,//是base指向的待排序数组的元素个数。size_t size,//base指向的待排序数组元素的大小。void qsort(void* base,//指针,指向的是待排序的数组的第一个元素。qsort -- 用来排序的库函数,直接可以用来排序数据,底层使用的是。选择排序,插入排序,冒泡排序,快速排序,希尔排序....使用qsort这个库函数排序结构体的数据。
2024-03-08 18:23:05
433
1
原创 简单计算器以及用函数指针实现的计算器
注意:运用函数指针实现的计算器并没有直接调用函数,而是主调calc函数,calc函数再回调Add,Sub,Mul,Div函数。2.用函数指针实现计算器。
2024-02-24 11:01:06
397
原创 使用c语言来找单身狗的两种方法
例如找最低位,那么这一位是1的有1 3 1,是0的有2 4 2,由于是利用异或结果为1的某一位分的组,所以两个待查询数字一定分别在两组中。总结:1. 找出一个只出现过一次的数字的问题处理方法就是找一个数字把里面所有的数字都异或一遍,利用异或两次等于没异或的特点来处理。在一个整型数组中,只有一个数字出现一次,其他数组都是成对出现的,请找出那个只出现一次的数字。数组中有:1 2 3 4 5 1 2 3 4,只有5出现一次,其他数字都出现2次,找出5。有数组的元素是:1,2,3,4,5,1,2,3,4,6。
2024-02-09 09:52:34
417
1
原创 字符串左旋的三种方法
从这两种代码可以体会到strcpy和strcat以及strncat的用法;例如:ABCD左旋一个字符得到BCDA,ABCD左旋两个字符得到CDAB。strcat():字符串拼接;----》strncat则表示拼接n个字符。注意将方法里面的字符串换成ABCD就可以达到题干的解。使用库函数strcpy和strcat。strcpy():字符串拷贝;第三种方法:三段逆置。
2024-02-04 14:02:57
422
1
原创 用C语言在屏幕上打印菱形:
1.上半部分可看成一个高为7,底为13的三角形。1.上面的三角形和下面的三角形大小不一样的。别忘记换行,在每一次i改变的时候就要换行。2.每次打印完一行要记得换行。
2024-01-22 14:22:40
452
原创 三角形判断
针对每组输入数据,输出占一行,如果能构成三角形,等边三角形则输出“Equilateral triangle!”,等腰三角形则输出“Isosceles triangle!”,其余的三角形则输出“Ordinary triangle!”,反之输出“Not a triangle!题目有多组输入数据,每一行输入三个a,b,c(0<a,b,c<1000),作为三角形的三个边,用空格分隔。注意:&&和||的用法务必要掌握。
2024-01-05 12:07:06
412
2
原创 从键盘输入a, b, c的值,编程计算并输出一元二次方程ax2 + bx + c = 0的根
即x1的虚部系数小于等于x2的虚部系数,实部为0时不可省略。实部= -b / (2*a),虚部= sqrt(-△ ) / (2*a)多组输入,一行,包含三个浮点数a, b, c,以一个空格分隔,表示一元二次方程ax2 + bx + c = 0的系数。针对每组输入,输出一行,输出一元二次方程ax2 + bx +c = 0的根的情况。如果a = 0,输出“Not quadratic equation”;所有实数部分要求精确到小数点后2位,数字、符号之间没有空格。,其中x1
2024-01-01 11:27:09
827
原创 计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值,打印出结果
浮点数除整形要加.0,加减用变量flag来实现。
2023-12-30 12:13:35
399
1
原创 c语言中%d与%2d与%02d的区别在哪里
{int a = 1;//输出结果为:_1 , _代表空格 return 0;总结:无论哪种表示方法如果我们定义的整数的位数大于我们想输出的数字的位数,输出时仍然是我们定义的数字。{int a = 1;//输出结果:01 return 0;{int a = 1;//输出结果为1 return 0;4.%i . j表示我们输出的数字一共占m个位数,小数点后占n个。
2023-12-23 22:07:39
899
1
原创 ||和&&的用法
在这里if(i==0||i==n-1||j==0||j==n-1)只要i==0.i==n-1.j==0.j==n-1中有一个表达式为真,就执行if后面的运算,这里属于或的关系。在这里if(a+b>c&&a+c>b&&b+c>a)要三个条件全满足,才能够执行if后面的运算,这里属于并且的关系。
2023-12-18 23:09:00
366
1
原创 c语言中i=0和i==0有什么区别
而flag==0是判断flag的值是否为0,如果为0,则执行下一条语句。i==0是一个表达式,就是判断i的值是否等于0。i=0是一个赋值语句,就是把0赋值给变量i;这里我们可以注意到flag在赋值上的变化。flag=1是对flag赋值为1。
2023-12-13 15:40:01
929
1
原创 c语言的分支与循环语句(2)
1、for括号里面的三个表达式是可选的,也就是说可写可不写,表达式2不写的话编译器会认为该条件永远为真,循环会一直执行下去。先执行语句,然后判断表达式,如果表达式为真,执行语句,重复进行,如果表达式为假,则退出循环。先判断表达式,如果为真执行语句,然后继续判断表达式,重新进行,直到表达式为假,退出循环,不再执行。i++是每次执行完大括号里的语句时最后要执行的语句,这里也可以不写,写在大括号内也是可以的。这里的i=1,sum=0就是初始化的过程,这里可以不写,但是在执行循环前必须要初始化。
2023-12-07 14:18:47
355
原创 c语言的分支与循环语句(1)
注意:执行判断条件,如果为真(非0),则执行大括号中的语句。如果满足if的条件就执行if里的代码,否则执行else里的代码。作用:根据问题的多种情况,分别执行对应的代码。作用:判断条件是否成功,成功则执行语句。else if(判断条件2)
2023-12-06 22:54:15
35
原创 学习C语言从入门开始
C语言是一种结构化语言,是大部分编程语言的基础,学好C语言,以后的更多编程语言才有可能学好。2.上课认真听讲积极思考,提高上课效率,老师上课讲述的都是课程的重点,,听好课程可以达到“事半功倍”的目的;通过上机实践来验证所学的理论,通过在机器上查找错误来巩固概念,通过提高上机能力来促进理论学习,开阔编程思路,提高反映速度,提高分析问题解决问题的能力,锻炼心里素质,提高心理承受能力。C语言是一门很有用的,对于我们的就业很实际的语言,学习好C语言是一项必须而实际的语言,我们必须要好好掌握。
2023-11-18 20:41:03
43
3
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人