- 博客(47)
- 收藏
- 关注
原创 C++特性 多态
多态是一个继承关系下的类对象,去调用同一函数,产生不同的行为。Student继承了person。Person对象买全价票,Student对象买半价票。public://虚函数 类成员函数前加virtualcout << "全价买票" << endl;public:cout << "半价买票" << endl;// 这里可以看到虽然都是Person指针Ptr在调用BuyTicket// 但是跟ptr没关系,而是由ptr指向的对象决定的int main()fun(p1);
2025-11-12 11:52:48
721
原创 进程的理解
计算机(笔记本,服务器)大部分都遵循冯诺依曼体系。:键盘,鼠标,话筒,摄像头,网卡,磁盘(其实就是外存):显示器,磁盘,网卡,打印机.....:运算器➕控制器存储器就是内存。
2026-01-08 11:56:35
599
原创 智能指针喵喵喵
保障了资源的正常释放,避免了资源泄露问题。智能指针除了要满足RAII思路,还要方便访问资源,所以还会像迭代器重载一些操作符operator*/operator->/operator[],方便访问资源。
2025-12-19 21:34:17
658
原创 异常那些不为人知的秘密
异常处理机制 允许程序中独立开发的部分在运行时就出现的问题 进行通信 并做出相应的处理,异常使得我们将问题的检测与解决问题的过程分开,程序的一部分负责检测问题的出现,然后解决问题的任务传递给程序的另一部分,检测环节问题处理模块的不需要所有细节。C语言主要通过错误码的形式处理错误,错误码本质就是对错误信息进行分类编号,拿到错误码以后还要去查询错误信息,比较麻烦。异常时抛出一个对象,这个对象可以包含更全面的各种信息。程序出现问题时,我们通过抛出(throw)一个对象来引发异常,该对象当前的类型以及调用链决定
2025-12-17 18:44:39
898
原创 C++11那些不为人知的特性
lambda表达式本质是一个匿名函数对象,和普通函数不同的是他可以定义在函数内部。在语法层面是来讲是没有类型的,用 auto或者模板参数定义的对象来接收。格式[ ]捕捉列表,出现在lambda函数的开始位置,编译器根据捕捉列表判断后面的表达式是否为lambda函数,捕捉列表可以捕捉变量供lambda函数使用,捕捉列表可以传值捕捉和传引用捕捉。捕捉列表为空也不可以忽略。( )参数列表,传参 ,如果不需要参数的传递,则可以连()一起省略-> 返回值类型,用追踪返回类型形式。
2025-12-17 08:43:15
997
原创 AVL[特殊字符]的理解
AVL树是1AVL是一颗。2它的,且左右子树的高度差绝对值不超过1。AVL树是一颗高度的平衡二叉搜索树,通过高度差去控制平衡。AVL树整体结点数量和分布和完全二叉搜索树类似,。
2025-11-22 19:50:27
617
原创 二叉搜索树
又叫二叉排序树,有两种情况2是一颗满足以下性质的树如果左子树不为空,则左子树所有节点小于根节点如果右子树不为空,则右子树所有节点小于根节点左右子树也分别为二叉搜索树。multimap/multiset/map/set底层都为二叉搜索树,其中map/set不可以插入相同的值,multimap/multiset可以插入相同的值。
2025-11-20 18:42:09
677
原创 Stack_Queue
stack是一种先进后出的数据结构,只要能实现的线性结构都可以作为stack的底层容器,如vector或者list。queue是一种先进后出的数据结构,只要能实现的线性结构度可以作为queue的底层容器,如list。选择deque作为stack或者queue的底层容器,主要是:1stack和queue只需要。2在stack元素增长时,;queue中的元素增长时,;
2025-10-30 09:31:47
329
原创 STL_List简单使用
2push_back 与emplace的比较。1简单应用 push_back。vector与list效率对比。insert与erase。
2025-10-28 11:19:17
217
原创 vector习题
https://leetcode.cn/problems/single-number/https://leetcode.cn/problems/pascals-triangle/description/https://leetcode.cn/problems/remove-duplicates-from-sorted-array/description/https://leetcode.cn/problems/single-number-ii/description/https://leetcode.cn/
2025-10-22 19:16:44
320
原创 模板简介初阶
模板不建议定义和声明到两个文件中.h和.cpp会出现链接错误。int main()//类模板都是显示实例化//调用operater new 开空间然后调用 构造函数开数组//delete p1;//调用析构函数 清理数组资源 然后调用operator delete删除空间return 0;
2025-10-21 10:21:01
387
原创 内存管理C++
栈又叫堆栈局部变量(非静态)、函数参数、返回值等等,栈是向下增长的。堆用于程序运行时动态分配内存堆可以向上增长。数据段全局数据和静态数据。代码段可执行代码和只读常量。C语言的动态内存管理方式malloc calloc reallocclass Apublic::_a1(a1),_a2(a2)if (this!return 0;//{
2025-10-20 21:21:10
899
原创 类和对象3
实现构造函数中初始化成员变量时,主要使用函数体内赋值,构造函数初始化还有一种方式是,就是初始化列表。初始化列表的使用方式 以一个冒号开头,接着以一个逗号分割的数据成员列表,每个“成员变量”后面跟初始值或者表达式。每个成员变量都只能在初始化列表出现一次,语法理解上初始化列表是每个成员变量定义初始化的地方。引用成员变量,const成员变量,没有默认构造的类 类型变量,必须放在初始化列表进行初始化,否则会编译报错。C++11支持在成员变量声明的位置给缺省值,这个缺省值主要是给没有显示在初始化列表成员使用的。
2025-10-18 14:34:30
602
原创 类与对象2
如果一个构造函数的第一个参数是自身类类型的引用,且任何其他参数都有默认值,这个构造函数也叫做拷贝构造函数,也就是说拷贝构造是一个特殊的构造函数。拷贝构造函数 用一个已经存在的对象去初始化另一个对象class Datapublic://无参构造函数//Data()//{//}//全缺省构造函数_day = day;//半缺省构造函数//{//}//结构体C语言也会完成拷贝~Data()private:int _year;int _month;
2025-10-13 10:15:09
876
原创 构造函数和初始化列表的关系
因为使用构造函数一定不可避免的会调用自定义类型成员变量的默认构造,然而使用初始化列表可以避免使用默认构造函数,直接调用该成员变量的拷贝构造class Time //声明一个Time类,类中有三个成员变量,和一个有参构造函数public:private:int _hour;
2025-10-02 21:11:35
199
原创 编译和链接
摘要: 程序从源代码到执行需经历翻译和运行两个环境。翻译环境包括编译(预处理、词法语法分析、语义分析、汇编)和链接(地址分配、符号决议)过程,将.c文件转换为可执行程序。运行环境则负责程序载入内存、执行main函数、管理堆栈/静态内存以及程序终止。其中链接阶段需解决多文件间的符号引用问题,通过重定位修正函数和变量的地址。整个过程涉及编译器、汇编器和链接器的协同工作,最终生成可在特定操作系统或独立环境中运行的可执行文件。(149字)
2025-10-02 08:55:03
818
原创 C++入门基础知识
1.namespace后面跟命名空间名,{命名空间的成员变量},{}里面是变量,函数,类型。2.namespace的本质是定义出一个域,这个域于全局域互相独立,所以就解决了变量冲突3.C++中有全局域,局部域,命名空间域,类域。域影响的是编译时,语法查找一个变量/函数/类型出处的逻辑,有了域的隔离,命名冲突问题也就解决了。局部域和全局域不仅影响语法查找逻辑,还影响变量的生命周期。命名空间域和类域不影响变量的生命周期。4.namespace只可以在全局定义,也可以嵌套定义。
2025-09-25 17:35:18
692
原创 初步认识顺序表
顺序表是线性表的一种,其底层是数组,进行一系列封装,实现增删查改,包装成顺序表。线性表包括顺序表,链表,栈,队列等等。是n个具有相同元素的有限序列。线性表在物理上存储时,以数组或链表形式存储。物理结构上不一定连续,逻辑结构一定连续。
2025-08-31 15:54:31
199
原创 初认识链表
【链表操作摘要】链表是一种非连续存储结构,通过指针连接节点。本文介绍了链表的基本操作实现:1)节点定义与打印;2)尾插/头插操作;3)尾删/头删处理;4)查找节点;5)指定位置插入/删除节点(包括前后位置处理);6)链表销毁。关键点在于动态内存管理和指针操作,特别注意处理空链表和边界情况。代码展示了完整的链表操作函数集,包括开辟节点、遍历链表和指针重定向等核心操作细节。
2025-08-28 12:34:41
138
原创 比特杰哥第21讲:动态内存管理
包含柔性数组成员的结构⽤malloc()函数进⾏内存的动态分配,并且分配的内存应该⼤于结构的⼤ ⼩,以适应柔性数组的预期⼤⼩。• sizeof返回的这种结构⼤⼩不包括柔性数组的内存。• 结构中的柔性数组成员前⾯必须⾄少⼀个其他成员。4.4 使⽤free释放⼀块动态开辟内存的⼀部分。4.3 对⾮动态开辟内存使⽤free释放。4.2 对动态开辟空间的越界访问。2. malloc和free。2. malloc和free。4. 常⻅的动态内存的错误。4. 常⻅的动态内存的错误。6.2 柔性数组的使⽤。
2024-04-21 09:22:47
280
1
原创 指针杰哥第二讲
• &数组名,这⾥的数组名表⽰整个数组,取出的是整个数组的地址(整个数组的地址和数组⾸元素 的地址是有区别的) 除此之外,任何地⽅使⽤数组名,数组名都表⽰⾸元素的地址。• sizeof(数组名),sizeof中单独放数组名,这⾥的数组名表⽰整个数组,计算的是整个数组的⼤⼩, 单位是字节。数组元素的访问在编译器处理的时候,也是转换成⾸元素的地址+偏移 量求出元素的地址,然后解引⽤来访问的。我们发现数组名和数组⾸元素的地址打印出的结果⼀模⼀样,数组名就是数组⾸元素(第⼀个元素)的地 址。
2024-03-14 13:03:42
410
1
原创 第11讲:深⼊理解指针(1)
如果明确知道指针指向哪⾥就直接赋值地址,如果不知道指针应该指向哪⾥,可以给指针赋值NULL. NULL 是C语⾔中定义的⼀个标识符常量,值是0,0也是地址,这个地址是⽆法使⽤的,读写该地址 会报错。• const如果放在*的右边,修饰的是指针变量本⾝,保证了指针变量的内容不能修改,但是指针指 向的内容,可以通过指针改变。• const如果放在*的左边,修饰的是指针指向的内容,保证指针指向的内容不能通过指针来改变。• 注意指针变量的⼤⼩和类型是⽆关的,只要指针类型的变量,在相同的平台下,⼤⼩都是相同的。
2024-03-13 22:50:19
1514
原创 函数递归gr
在C语⾔中每⼀次函数调⽤,都要需要为本次函数调⽤在栈区申请⼀块内存空间来保存函数调⽤期间 的各种局部变量的值,这块空间被称为运⾏时堆栈,或者函数栈帧。函数不返回,函数对应的栈帧空间就⼀直占⽤,所以如果函数调⽤中存在递归调⽤的话,每⼀次递归 函数调⽤都会开辟属于⾃⼰的栈帧空间,直到函数递归不再继续,开始回归,才逐层释放栈帧空间。所以如果采⽤函数递归的⽅式完成代码,递归层次太深,就会浪费太多的栈帧空间,也可能引起栈溢 出(stackoverflow)的问题。递归中的递就是递推的意思,归就是回归。
2024-02-22 12:29:39
498
1
原创 VS调试技巧
当程序员写完代码,测试再对程序进⾏测试,直到程序的质量符合交付给⽤⼾ 使⽤的标准,这个时候就会设置为 release ,编译产⽣的就是 release 版本的可执⾏程序,这个 版本是⽤⼾使⽤的,⽆需包含调试信息等。程序员在写代码的时候,需要经常性的调试代码,就将这⾥设置为 debug ,这样编译产⽣的是 debug 版本的可执⾏程序,其中包含调试信息,是可以直接调试的。arr数组的地址整体是⼩ 于i的地址。9.3 运⾏时错误 运⾏时错误,是千变万化的,需要借助调试,逐步定位问题,调试解决的是运⾏时问题。
2024-02-20 11:42:08
1785
原创 扫雷游戏郭蓉
printf("你被炸死了\n");printf("输入错误,重新输入");printf("输入的坐标非法\n");printf("----扫雷游戏-----\n");printf("请输入坐标* *: ");printf("游戏结束");printf("恭喜你排雷成功");printf("请输入>");2随机的生成东西使用随机数的生成rand。//⽣成随机的坐标,布置雷。3函数分开写的好出,便于随时调用。
2024-02-20 10:06:59
377
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅