- 博客(20)
- 收藏
- 关注
原创 C++---模板初阶
C++模板:泛型编程的核心机制 摘要: C++模板是语言的核心特性,实现了泛型编程。通过template关键字定义模板参数(class/typename),编译器根据调用自动生成具体代码。函数模板支持参数推导,类模板需显式实例化。模板解决了代码复用问题,如swap函数无需为每种类型重写。相比C语言的typedef,模板能同时支持多种类型实例化。模板将重复代码编写工作交给编译器,实现了"活字印刷"式的代码生成机制。使用时需注意:模板不支持声明定义分离到不同文件,类成员函数需在类内定义或同时
2025-07-04 10:10:22
819
原创 C++---内存管理
本文系统分析了C++的内存管理机制,重点对比了C++的new/delete与C语言的malloc/free。内存分为栈、堆、静态区和常量区,不同区域的生命周期各异。C++的new操作不仅分配内存(底层调用operator new和malloc),还会自动调用构造函数;delete则先调用析构函数再释放内存(通过operator delete和free)。对于自定义类型,new/delete机制尤为重要,它能自动处理构造和析构。文章还探讨了内存池等高级概念,并强调必须匹配使用new/delete,避免混用导致
2025-07-01 10:45:37
930
原创 C++---类和对象(下)
本文主要探讨C++类和对象的中级知识,重点包括: 构造函数初始化列表的使用方法、注意事项和优势,强调引用、const成员和没有默认构造的类类型必须在初始化列表初始化。 类型转换中单参数构造函数的隐式转换机制,以及如何用explicit关键字禁止这种转换。 静态成员的用法和特性,包括静态成员变量属于类共享、静态成员函数没有this指针等。 友元机制(友元函数和友元类)如何突破类的封装限制,但会破坏封装性不宜多用。 内部类的概念和特性,内部类受外部类类域和访问限定符限制,默认是外部类的友元。 匿名对象的使用场景
2025-06-28 07:23:58
645
原创 C++---类和对象(中)
本文详细介绍了C++中类和对象的默认成员函数及运算符重载。主要内容包括: 默认成员函数:构造函数(初始化对象)、析构函数(资源清理)、拷贝构造函数(对象拷贝)和赋值运算符重载(对象赋值)。编译器会自动生成这些函数,但通常需要自定义实现以满足需求,特别是涉及资源管理的情况。 运算符重载:通过operator关键字重新定义运算符的行为,使自定义类型也能使用运算符。重点讲解了日期类的实现,包括算术运算符(+、-)、比较运算符(<、>等)、自增/自减运算符等。 特殊技巧:如const成员函数、友元函数、
2025-06-17 21:29:06
554
原创 C++---类和对象(上)
本文系统讲解了C++类的核心概念与应用。主要内容包括:1. 类定义格式与访问限定符,对比class和struct的区别;2. 类域的作用及实例化过程,分析空类对象占用1字节的原因;3. this指针的实现原理及内存对齐机制;4. C++封装特性与C语言实现的差异,通过访问控制实现更规范的管理。文章通过栈的实现对比,阐明C++将数据和方法封装在类中,通过访问限定符进行限制,体现了面向对象封装的核心思想。
2025-06-15 11:09:01
656
原创 C++--入门基础
C++发展史与特性摘要 C++由本贾尼博士在C语言基础上发展而来,引入面向对象编程思想。核心特性包括: 兼容C语言,同时扩展面向对象功能 通过命名空间解决命名冲突问题 改进特性:缺省参数、函数重载、引用(reference)替代部分指针场景 新增内联(inline)函数替代宏函数,提高安全性 引入nullptr解决NULL的歧义问题 C++在系统开发、游戏服务器、AI底层等领域仍保持不可替代性。虽然Rust等新语言出现,但C++凭借性能优势和庞大存量代码,仍是主流开发语言之一。引用和指针各有所长,在实践中相
2025-06-13 22:13:43
941
原创 初阶数据结构 ---- 排序
什么是稳定性?有两个(或多个)相同的值,排序后它的相对顺序变不变如果会变,能保证它在这个地方是顺序不变的,那这个时候就是稳定的不能保证的,就是不稳定的所以,稳定性指的是相同的值排序前后的稳定性是否改变。那有人就会觉得,反正都是相同的值,排完之后谁在前,谁在后,有啥意义嘛?普通场景下确实没啥意义,什么情况下就有意义了呢?结构体排序的时候会很有意义。其实实践当中咱们排序通常都是按结构体进行排序,打个比方:这儿有一堆成绩,这儿有一堆值,99,我知道99是谁吗?所以我们实践当中很多都是结构体。
2025-04-30 11:26:34
1017
原创 初阶数据结构----二叉树(链式结构)
/创建节点}BTNode;首先,我们是不是得有一棵树啊?这个部分和我们以前的讲解有些不一样,我们以前比如说学链表啊等等,我们首先都是讲插入。但是这块,我们前面说了,普通的二叉树插入值没有什么意义,要在这个结构之上加搜索二叉树才有意义,但是我们现在去讲搜索二叉树又为时过早。但我们需要有一颗树来进行测试啊。我们可以在这儿手动的搓一棵树出来,我们去malloc几个节点,把他们给链接起来。");//造一棵二叉树。
2025-01-10 18:18:58
993
原创 初阶数据结构----二叉树(顺序结构)
任何一棵树的构成都是由两个部分构成递归定义:大问题拆解成小问题,小问题拆解成更小的问题,直到不能拆解为止。//定义堆的结构int size;}HP;我们在二叉树的顺序结构中讲了这三个东西它比我们之前的数据结构难在哪儿呢?我们之前的数据结构只是把它存起来,这个还可以用来排序,多了一点功能性。下一篇我们将来学习二叉树的链式结构。作者水平有限,如有错误,欢迎指正!
2024-11-29 10:45:34
868
原创 初阶数据结构--队列
/定义队列的节点}QNode;int size;}Queue;为什么要定义这个Queue呢?如果没有它,那我们的插入删除就得这么写可以,但是不好,显得很臃肿。定义了Queue之后,就可以这么写把二级的问题也解决了。
2024-11-12 12:18:57
765
原创 初阶数据结构-栈
栈也是一种线性表,但是它比起顺序表和链表有更多的限制。有什么限制呢?我们的顺序表和链表呢,它允许在头啊,尾啊,中间啊这些位置任意的去插入数据,删除数据。栈呢,他只允许在固定的一端进行插入,删除数据,这一端叫做栈顶,另一端叫栈底。插入操作叫进栈/压栈/入栈。删除操作叫出栈,出数据也在栈顶-----类似弹夹。那这样可以达到一个什么性质呢?类似后进先出。
2024-11-09 19:47:32
702
原创 复杂度(时间和空间)
大O符号(Big O notation):是用于描述函数渐进行为的数学符号推导大O阶方法:1、用常数1取代运行时间中的所有加法常数。2、在修改后的运行次数函数中,只保留最高阶项。3、如果最高阶项存在且不是1,则去除与这个项目相乘的常数。得到的结果就是大O阶。本质计算算法时间复杂度(次数)属于哪个量级(level)O的意思就是表达我是一个估算你的量级的一个简化过的那常见的量级有那些呢?
2024-09-21 23:07:13
1036
1
原创 贪吃蛇(C语言)
Windows 这个多作业系统除了协调应用程序的执行、分配内存、管理资源之外, 它同时也是⼀个很大的服务中心,调用这个服务中心的各种服务(每⼀种服务就是⼀个函数),可以帮应⽤程序达到开启视窗、描绘图形、使用周边设备等目的,由于这些函数服务的对象是应用程序(Application), 所以便称之为 Application Programming Interface,简称 API 函数。所以这里面会涉及到光标的定位,而光标定位的过程中就得知道我的坐标系啊,所以这里我们再次强调一下,控制台的坐标系是这样子的。
2024-09-17 22:32:53
2612
4
原创 编译和链接
程序同时也可以使用静态(static)内存,存储于静态内存中的变量在程序的整个执行过程 一直保留他们的值。电脑能够执行的是二进制指令,所以我们需要把C语言代码转化成二进制指令,这就是编译器所做的事情。在独立的环境中,程序的载入必须由手工安排,也可能是通过可执行代码置入只读内存来完成。处理#include 预编译指令,将包含的头文件的内容插入到该预编译指令的位置。这个过程是递归进行的,也就是说被包含的头文件也可能包含其他文件。在预处理的过程中,源文件和头文件会被处理成后缀为.i的文件。也有可能是意外终止。
2024-08-22 13:34:05
943
原创 文件操作(C语言)
每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息(如文件的名字,文件状态及文件当前的位置等)。我们程序的数据需要输出到外部设备,也需要从外部设备获取数据,不同的外部设备的输入输出操作各不相同,为了方便程序员对各种设备进行方便的操作,我们抽象出了流的概念,我们可以把流想象成流淌着字符的河。如果没有文件,我们写的程序的数据是储存在内存中的,程序退出,内存回收,当我们再次运行程序,是看不到上次程序的数据的。C语言中,就是通过FILE*的文件指针来维护流的各种操作的。
2024-08-21 11:15:50
682
原创 扫雷游戏(含源码)
然后,我们来做游戏,扫雷游戏中的棋盘,我们很容易想到用二维数组去做,我们常常用0表示没有雷,1来表示雷,但我们在玩的时候,点击棋盘时,棋盘会显示一个数字告诉我们这周围的一圈有几个雷,那如果现在有这样一种情况,我这一圈有一个雷,那这个数字1是表示雷呢?game.h用来放置我们的头文件和函数的声明,game.c用来放置我们的游戏,test.c放置游戏的一个基本的进入和出去的逻辑.mine是放雷的棋盘,show是数个数的棋盘.为了方便棋盘大小的更改,我这里没有输入确定的数字,而是使用了宏定义。
2024-03-29 21:15:47
596
1
原创 分支语句和循环语句
这就是while循环和for循环的区别,while循环的起始值,条件和调整是分开的,这样当你在while循环中写了大量命令时,很难快速找到这三个东西,for循环则不存在这个问题。if语句还可以嵌套,你可以if和if嵌套,也可以用else和if嵌套,当用else和if进行嵌套时,可以这样写(else if())。在解决问题的时候,不同的情况会对应不同的解决方法,当我们遇到多种情况(即需要多种解决办法时),就需要用到分支语句了。以上就是我学完分支和循环语句的总结,水平有限,如有错误,还望指正,诸君共勉。
2024-03-01 21:49:22
450
原创 第一篇文章
对于个人而言,我最想进入的一家IT公司是腾讯,因为它在技术领域的创新和领导地位、突破常规和开创未来的产品、开放和强调员工自主、以及优厚的福利待遇等方面都让我非常向往。我的编程目标是在计算机科学的领域掌握核心技能,能够熟练使用 C++、 Python、Java 等编程语言进行编码,掌握常用数据结构和算法,可以开发出实用的应用程序和网站。对于编程的学习,我打算采取多种方式和途径进行学习,例如:在线学习资源:我会浏览一些在线编程平台和教育网站,如 B站 等,学习一些基础课程和进阶课程;
2023-11-22 20:28:16
71
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅