自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【 C++】日期类(Date)的完整实现

代码语言:javascript。

2026-03-06 03:03:53

原创 【C++】C++入门基础:引用,内联,nullptr

比如,“萨姆”是流萤的别名,“萨姆”就是对流萤的引用,当我们称呼萨姆时,指的仍然是流萤这个人。代码语言:javascriptAI代码解释可以看到: b,c,d的值与地址和a是完全相同的:在这里插入图片描述。

2026-03-06 03:02:05

原创 【 C++】模板简介

假如我们想写一个Swap函数,针对每一种类型,都要函数重载写一次,但它们的实现原理是几乎一样的。在这种情况下,重载的函数仅仅是类型不同,代码复用率比较低,只要有新类型出现,都需要用户自己增加对应的函数,并且代码的可维护性也较低。代码语言:javascriptAI代码解释前人也想到了这个问题,于是,泛型编程和模板的概念就诞生了: 泛型编程:编写与类型无关的通用代码,是代码复用的一种手段。 模板是泛型编程的基础。模板一般分为函数模板、类模板。函数模板代表了一系列函数,这一系列函数可能只有类型不同的区别。函

2026-03-06 03:00:04

原创 【 C++】模板简介

假如我们想写一个Swap函数,针对每一种类型,都要函数重载写一次,但它们的实现原理是几乎一样的。在这种情况下,重载的函数仅仅是类型不同,代码复用率比较低,只要有新类型出现,都需要用户自己增加对应的函数,并且代码的可维护性也较低。代码语言:javascriptAI代码解释前人也想到了这个问题,于是,泛型编程和模板的概念就诞生了: 泛型编程:编写与类型无关的通用代码,是代码复用的一种手段。 模板是泛型编程的基础。模板一般分为函数模板、类模板。函数模板代表了一系列函数,这一系列函数可能只有类型不同的区别。函

2026-03-05 03:00:27 3

原创 【 C++】日期类(Date)的完整实现

代码语言:javascript。

2026-03-05 03:00:17 2

原创 【 C++】list及其模拟实现

在这里插入图片描述list是我们之前学过的带头双向链表的类模板,具有链表的一系列性质,也有多种多样的接口便于使用,使用方法与vector大体相似:函数接口说明list()构造空的list,只有头结点,头结点的前后指针指向自己begin返回第一个元素(即头结点的下一个)的迭代器end返回最后一个元素下一个位置(即头结点)的迭代器empty判断list是否为空,是返回true,否则返回falsefront返回第一个节点中值的引用back返回最后一个节点中值的引用。

2026-03-05 02:59:56 2

原创 【C++】从零认识C++的“继承”

继承的定义方式是:代码语言:javascriptAI代码解释class 派生类名 : 继承方式 基类名{派生类内容};假如定义一个Person类表示人,派生出一个Student类表示学生。Student包括Person的方法与属性,同时也有Student的独特方法与属性。

2026-03-05 02:58:29 2

原创 【C++】来学习使用set和map吧

也可以传一个key值删除这个key值的结点,找不到这个key结点则不删除,这种版本的erase返回值是size_t,和count道理一样,返回值代表删除的结点个数,1代表删除了一个结点,0代表没有删除结点,也可以用于判断删除是否成功。也就是说,无论key插入失败成功,insert的返回值的first都是key结点的迭代器,意味着insert也能充当查找的功能,下面[ ]的重载就是利用了这一点。这个函数的返回值是size_t类型,是key值为val的个数,但是由于set中不允许有重复key值,

2026-03-05 02:56:57 1

原创 【C++】类型转换详解:显式与隐式转换的艺术

显式类型转换(也称为强制类型转换)是程序员通过特定语法明确请求的转换。显式转换可以实现隐式转换不允许的转换,但其安全性需要程序员自己保证。需要使用转换运算符或 C 风格转换。通常较安全,只允许 "扩展" 转换。代码语言:javascript。代码语言:javascript。代码语言:javascript。代码语言:javascript。代码语言:javascript。代码语言:javascript。代码语言:javascript。代码语言:javascript。代码语言:javascript。

2026-03-05 02:56:13 1

原创 【C++】详解形参和实参:别再傻傻分不清

形参(形式参数)是函数定义时声明的参数,位于函数名后的括号中,用于接收调用时传递的数据。例如:代码语言:javascriptAI代码解释// x和y就是形参x : y;形参只在函数内部有效,相当于函数内的局部变量,只有当函数被调用时才会分配内存,函数执行结束后立即释放。实参(实际参数)是函数调用时传递给函数的具体数据,可以是常量、变量、表达式或函数返回值。例如:代码语言:javascriptAI代码解释// 以下几种都是实参的合法形式max(5, 8);// 常量作为实参。

2026-03-05 02:54:12 2

原创 《从崩溃到精通:C++ 内存管理避坑指南,详解自定义类型 new/delete 调用构造 / 析构的关键逻辑》

代码语言:javascript。定位new表达式是在。

2026-03-05 02:52:26 1

原创 别再用函数重载堆代码了!C++ 模板初阶教程:原理 + 实例 + 避坑,新手也能秒懂

代码语言:javascriptAI代码解释// 类模板public:,_top(0){}private:T* _a;int main()//这里必须显示实例化,指明对象// 存int// 存doublereturn 0;代码语言:javascriptAI代码解释//泛型编程//模板不支持声明和定义分离定义.h 和 .cpppublic://{}//{// // 扩容// // ...//}private:T* _a;, _top(0)

2026-03-05 02:52:08 1

原创 C++ 方向 Web 自动化测试入门指南:从概念到 Selenium 实战

❌ 误区 2:“自动化测试能大幅度降低工作量” 自动化脚本需前期开发与后期维护(如 Web 界面元素变更后,脚本需同步修改),仅在 “长期多次回归” 场景下才能体现效率优势,短期项目反而可能增加工作量,只能说一定程度上降低了工作量。但实际企业中常出现 “冰淇淋蛋筒反模式”—— 自动化测试需要大量的初始投资,找到“突破点”,与手动测试相比,我们开始看到它对长期成本产生的积极影响,也能够清楚,这两种测试活动是完全兼容,产生短期和长期利益。不依赖界面,执行速度快,可在开发早期介入(前后端未联调时即可测试)

2026-03-05 02:51:49 23

原创 《告别 “会用不会讲”:C++ string 底层原理拆解 + 手撕实现,面试 / 开发都适用》

-这里将迭代器 typedef 为 char*,begin 函数返回指向字符串起始位置的指针,end 函数返回指向字符串有效字符结尾的下一个位置('\0'所在的位置)的指针,这样就可以利用指针的算术运算和解引用操作来实现迭代器的功能。下标访问是string最常用的操作之一,通过重载operator ,可以像访问数组一样操作string的字符,底层本质是对 _str 指针的索引访问,同时也需要确保访问不会越界(这个可以加断言)代码语言:javascript。代码语言:javascript。

2026-03-05 02:50:48 68

原创 C++ 继承入门:从基础概念到默认成员函数,吃透类复用的核心逻辑

先想一个场景:Student 和 Teacher 都需要 “姓名、地址、身份认证”,但 Student 有学号、Teacher 有职称。如果各自写一遍,代码会很冗余 —— 继承就是把“公共部分”抽成父类(基类),子类(派生类)直接复用。本篇博客代码示例中所需头文件代码语言:javascriptAI代码解释关键是 “继承方式 + 父类名”,比如 class Student : public Person。class默认私有继承,struct默认公有继承,推荐显式写继承方式(比如public。

2026-03-05 02:49:58 70

原创 《C++进阶:引用补充、内联函数与nullptr 核心用法》

拿顺序表为例,我直接给正确改法了,然后它的.cpp文件和.h文件这里是截图的。

2026-03-05 02:49:02 71

原创 《一篇拿下!C++:类和对象(中)构造函数与析构函数》

代码语言:javascriptAI代码解释。

2026-03-05 02:47:31 98

原创 C++ string 类使用超全攻略:从入门到高效避坑,日常开发直接使用

用char*处理字符串总踩内存、越界的坑?C++string类早帮你搞定这些 —— 自动管内存、接口丰富,开发和 OJ 题都高频用。这篇博客只讲string核心使用:从创建、遍历、修改,到容量优化、跨平台避坑,附实用代码,帮你快速上手解决需求。

2026-03-05 02:46:21 1

原创 《吃透 C++ vector:从基础使用到核心接口实战指南》

vector 提供了4种常用构造方式,我们可以根据不同场景来选择构造函数声明接口说明代码示例vector()(重点)无参构造,创建空 vector(空容器,size=0,capacity=0)构造并初始化 n 个 val(含 5 个 3,size=5,capacity=5)vector(const vector& x)(重点)拷贝构造,复制另一个 vector(v2 是 v1 的副本)迭代器初始化,复制区间元素(复制数组 a [0]~a [4])

2026-03-05 02:45:40 157

原创 《C++进阶之STL》【set/map 使用介绍】

cplusplus网站上关于C++的set容器在这里插入图片描述在这里插入图片描述在这里插入图片描述代码语言:javascriptAI代码解释关于 C++ STL 中set容器的模板参数说明:元素类型(T: set 底层存储的关键字类型,需保证该类型支持比较操作(默认需支持运算符)比较器(Compare,默认less<T>:用于定义元素间的排序规则。若T不支持默认比较(如:自定义类),或需自定义排序逻辑,可通过仿函数重载比较规则代码语言:javascriptAI代码解释。

2026-03-05 02:43:29 157

原创 【C++】C++入门基础:引用,内联,nullptr

比如,“萨姆”是流萤的别名,“萨姆”就是对流萤的引用,当我们称呼萨姆时,指的仍然是流萤这个人。代码语言:javascriptAI代码解释可以看到: b,c,d的值与地址和a是完全相同的:在这里插入图片描述。

2026-03-05 02:41:06 141

原创 C++入门基础:C++简介,命名空间

既然它们是不同的域,完全可以在各自其中定义相同名字的变量或函数或结构了。举个例子:代码语言:javascriptAI代码解释。

2026-03-05 02:40:33 175

原创 【C++】stack和queue、deque、priority_queue、仿函数

deque并不是真正完全连续的空间,而是由一段段连续的小空间拼接而成的,实际deque类似一个动态的二维数组,deque的迭代器的结构就更为复杂了。而在序列式场景中,可能经常需要遍历,所以实际需要线性数据结构时,大多数情况下优先考虑vector和list,deque的应用并不多,目前能看到的一个应用就是STL用它作为stack和queue的底层数据结构。换句话说,只有stack的栈顶元素和queue的队头元素才有机会被移除,因此stack和queue不提供遍历的功能,也不提供迭代器。

2026-03-05 02:39:54 151

原创 C++笔记-string(中)

但是它的用途并没有size广泛,因为length能做到的size一样能做到,并且size能做到的length不一定能做到,比如:如果想知道到一个二叉树有多大,我们需要的肯定是二叉树结点的个数,而不是二叉树的长度,这点size能做到,但是length就做不到。其实不同的编译器下扩容的规则是不一样的,在vs编译器下除了第一次扩容外,其余每次扩容都是之前容量的1.5倍大小,而在linux编译器下,每次扩容都是之前容量的2倍,扩容规则是由编译器来决定的。可以看出在vs编译器下,底层数组第一次开辟容量为15。

2026-03-04 02:38:11 1

原创 C++笔记-入门基础

命名空间中可以定义变量/函数/类型等。刚开始的using namespace std此时就用第三条可以解释了,就是把展开std中的全部成员,将全部成员放在了全局域中,这样我们要使用std中的变量或者函数是就不需要指定命名空间,而cout和endl都是属于std中的,所以我们在使用它们时,就不需要指定std这个命名空间,这在我们平时学习写代码是比较方便的。namespace名为命名空间,在C/C++中,变量,函数和后面要学的类都是大量存在的,这些变量,函数和类的名称都存在于全局作用域中,可能会导致很多冲突。

2026-03-04 02:37:11 1

原创 C++中STL六大组件List的简单介绍

在我们只要会其中的一个容器的接口,我们就可以触类旁通。不用抱太多疑虑。和大多数STL容器一样。包含的头文件还是它的本名<list>包含就要做#include <list>,不想加每次声明list对象和迭代器都加std::在对象之前的话#include <list> using namespace std;也是可以的。

2026-03-04 02:35:27

原创 C++STL容器List的模拟实现

list的实现,还是比较简单的,大家只要想着土家楼的形状,画出图来就好了,不需要过多担心。本次的博客会发出一个完整的实现List的List.hpp,以后也会这样,主要是分段发被说孩子分段生。二、模拟List由于list中的结构需要特定的类型和特定的指定地址的,所以我们先要实现list中的结点和迭代器。正所谓"工欲善其事,必先利其器"。

2026-03-04 02:34:30

原创 C++三大特性——封装、继承、多态(一)封装和继承

可能我们在不同的场合、不同人际关系、不同的指标计划中扮演着不同的身份。在家庭中我们可能是孩子,在工作中我们可能是打工人,在项目中我们可能是指标计划的执行者。因此我们具有多种不同的身份,如果要用C++中的类和对象一次性表示出来的话,那恐怕会有遗漏,如果新添加的代码和已完成而且经过测试的代码放在一起的话,那出了问题我们定位问题的效率是不高的。继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,保证我们开发时在原有基础不变的情况下进行扩展,新增函数和变量产生新的类。

2026-03-04 02:34:04 2

原创 【C++篇】智能指针

//重载运算符,模拟指针行为,方便资源的访问 T& operator*() { return *_ptr;这个 可调用对象实现你想要释放资源的方式,当构造智能指针时,给了定制的删除器,在智能指针析构时,就会调用删除其释放资源。代码语言:javascript。

2026-03-04 02:33:24

原创 LeetCode.2612最少翻转次数C++

假设下标i经过一次翻转后的下标为j,这个下标j肯定不是一个特定的下标,它代表翻转后的所有可能的下标。i>n-k的情况,当子数组在整个数组的最右边时,L=n-k,R=n-1。翻转后的下标为j=L+R-i=2*n-k-i-1。例如 对于k=4,长度为4的子数组,右端点最小是k-1=3,当i=0,1,2,i不可能是数组的右端点;i<k-1的情况,当子数组在整个数组的最左边时,L=0,R=k-1。i位置经过一次翻转后的下标为j,将i和j看成是用一条边连接,这条边的边权为1,代表翻转次数。也可以右移L-1,R-1。

2026-03-04 02:31:51

原创 单调栈学习C++

我们可以维护一个栈结构,先将数组的首元素入栈,然后开始遍历这个数组,如果遍历到的数组元素比栈顶元素小,那么就入栈;如果相等,也入栈;当遍历到的数组元素比此时栈顶的元素大时,记录此时相隔的天数,然后将栈顶元素弹出,继续比较栈顶的元素和数组元素的大小,直到栈顶元素小于或者等于栈顶元素,此时将该数组元素入栈。然后接着遍历下一个数组元素,依次循环。

2026-03-04 02:29:31

原创 构建安全的C++内存管理体系:从RAII到智能指针的完整解决方案

ok,我们通过代码来看一下——代码语言:javascriptAI代码解释。

2026-03-04 02:28:30

原创 C++面向对象继承全面解析:不能被继承的类、多继承、菱形虚拟继承与设计模式实践

通过前面的学习,我们知道派生类继承基类中的成员,派生类中的基类成员和基类中的成员是两部分,而如果我们在基类中定义了一个静态成员,那么派生类继承基类后,基类和派生类共用一份。但是我们知道类里面的私有成员或者保护成员在类外无法访问,此时我们就可以将Display函数成为基类的友元函数——但是好像还不能访问Student派生类中的保护成员,这是为什么?我不是已经继承了基类吗?假设现在我想在类外面访问基类和派生类的成员变量——代码语言:javascript。

2026-03-04 02:26:44 2

原创 【Linux网络】基于UDP的Socket编程,实现简单聊天室

上述,我们实现服务器的单线程的!那么存在多个用户同时登录、发消息退出登录的操作吗?代码语言:javascript。代码语言:javascript。代码语言:javascript。代码语言:javascript。代码语言:javascript。

2026-03-04 02:25:41

原创 【Linux网络】Socket编程实战,基于UDP协议的Echo Server

参数,要看我们想要进行什么类型的通信来决定。sin_family的类型为 sa_family_t,其本质是短整型变量。其本质是一个in_addr的结构体对象。代码语言:javascript。代码语言:javascript。代码语言:javascript。代码语言:javascript。代码语言:javascript。代码语言:javascript。代码语言:javascript。代码语言:javascript。代码语言:javascript。代码语言:javascript。代码语言:javascript。

2026-03-04 02:22:24 63

原创 C++的发展历史、C++的第一个程序 、命名空间、C++输⼊&输出、命名空间的使用等内容介绍

1、定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接⼀对{}即可,{}中即为命名空间的成员。命名空间中可以定义变量/函数/类型等。代码语言:javascriptAI代码解释namespace st//st为命名空间的名字//命名空间中定义变量/函数/类型int a = 10;int* arr;int size;

2026-03-04 02:21:04 45

原创 回文子串系列问题【C++】

求一个字符串中有多少个回文子串,其中一个字符也算是一个回文子串。【解法】动态规划求一个字符串中回文子串的个数,我么可以找到每个回文子串,然后统计个数即可。状态转移方程的推导: 当s[i]!=s[j]时,也就是子串的第一个字符和最后一个字符不相等,那么肯定不是回文串,所以dp[i][j]=false。 当s[i]==s[j]时,在该情况下,又细分三种情况:初始化dp表时,根据状态表示的定义,我们只会用到dp表主对角线的右上部分,左下部分不会用到,对于状态转移dp[i][j]=dp[i+1][j-1],我们不需

2026-03-04 02:20:25 52

原创 买卖股票的最佳时机问题 C++

2,dp[i-1][1]+prices[i]前一天持有股票,今天将股票卖出。所以,可得:dp[i][0]=max(dp[i-1][0],dp[i-1][1]+prices[i])。前一天不持有股票,几天持有股票(买入股票),也就是dp[i-1][0]-prices[i]。所以,可得:dp[i][0]=max(dp[i-1][1],dp[i-1][0]-prices[i])。dp[n][2]:dp[i][0]表示第i天未持有股票的最大利益,dp[i][1]表示第i天持有股票的最大利益。

2026-03-04 02:19:40 163

原创 C++篇之多态

类成员函数前⾯加virtual修饰,那么这个成员函数被称为虚函数。注意⾮成员函数不能加virtual修饰。

2026-03-04 02:18:39 138

原创 C++STL之stack

代码语言:javascript。将元素val压入stack中。将stack中尾部的元素弹出。返回stack中元素的个数。2.stack的模拟实现。检测stack是否为空。

2026-03-04 02:16:42 177

空空如也

空空如也

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

TA关注的人

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