自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【Linux】制作进度条小程序、git入门 (add、commit、push三板斧)以及git的其他问题

什么叫版本控制,就是把你写的代码版本的v1 ,v2 ,v3;在你的电脑的一个磁盘中创建一个目录来保存这些不同版本的代码,git就负责这件事,这个目录叫做本地仓库,把本地仓库代码放到云服务器上的目录中存着,这个云服务器上的目录叫做远端仓库。如果有文件的后缀在这里面的,那么这个文件不会被添加到仓库中(注意通配符*不要忽略了)在有了前面的基础(缓冲区,回车换行)后,我们可以来实现一下进度条的实现。git是具有网络功能的版本控制器,开源,客户端和服务端是一体的。然后到gitee 中复制新创建的仓库地址。

2025-12-06 19:52:31 356 1

原创 【Linux】自动化构建-make/Makefile、倒计时小程序、(补充代码的连接阶段)

makefile带来的好处就是⸺“⾃动化编译”,⼀旦写好,只需要⼀个make命令,整个⼯程完全⾃动编译,极⼤的提⾼了软件开发的效率。make是⼀个命令⼯具,是⼀个解释makefile中指令的命令⼯具,⼀般来说,⼤多数的IDE都有这个命令,⽐如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可⻅,makefile都成为了⼀种在⼯程⽅⾯的编译⽅法。make是⼀条命令,makefile/Makefile是⼀个⽂件,两个搭配使⽤,完成项⽬⾃动化构建。

2025-11-30 15:01:47 960

原创 【Linux】Linux编译器-gcc/g++使用和gcc具体编译过程以及编译选项的小插曲

预处理 :E编译 :S汇编 :c连接 :c执行10Hello此时,我们想一下在连接中是怎样连接的,和谁连接,怎样实现的,在下一篇文章中小编会详解。

2025-11-16 20:27:05 812

原创 【Linux】扎根命令行,栖居代码间:Linux开发工具漫谈

有了源代码,把源代码编译好的文件下载安装,但是有缺陷的:尽管有了源代码,但是还需要源代码的编译环境才能编译,导致无法普及到用户(不建议)软件之间是有版本之间的要求的,而且还要是安装到合适的平台上,yum能解决安装源,安装版本,安装依赖,它能装上合适我们平台的软件版本。控制屏幕光标的移动,字符、字或⾏的删除,移动复制某区段及进⼊Insert mode下,或者到 lastline mode。在Linux下安装软件, ⼀个通常的办法是下载到程序的源代码, 并进⾏编译, 得到可执⾏程序.

2025-11-09 20:04:29 832

原创 【Linux】Linux权限讲解 :写给文件的一封情书

sudo 指令 :给当前这个指令短暂提权,这个“权” 是权限,那什么是权限?一个事务的权限认证的是身份,也就是不同角色,不同角色能在相同的事务上做不同的事,但还有一点,一个事务本身能做什么,也和事务的本身属性有关权限与“谁”的身份有关权限与事务本身的“属性”也有关这里来谈文件的属性 : 可读,可写,可执行这里我们就来好好的看一下这一行行的字符是什么。

2025-11-02 18:54:16 958

原创 【洛谷刷题】字符串,函数与结构体部分题目分享

那么我们假设确定一个元素 X 在,X的状态是在,它的状态只有一种,那还剩下(n-1) 个元素的状态不确定(在/不在) ,那在x一个元素的状态确定后,它们的所有组合次数是2^(n-1) 种,每个组合都是一个子集嘛,那2^(n-1) 个子集,就是x在的子集数量,也就 是包含x的子集的数量,那x* 2^(n-1) ,就是所有子集中x的总和,那把每个元素的所有子集中的总和加起来不就是结果了吗,那sum =(x1+x2+x3+....)*2^(n-1) ,也就是所有元素在所有子集中的总和。

2025-11-01 16:54:40 708

原创 【洛谷算题】顺序,分支,循环结构部分题目分享

/换算成分钟 ,需要是int 类型才能% ,导致100/99= 1点几,这里就成1了,所以这里我们要向上取整,也就是说在这里 ,1点几分钟 ,我们把它当作2分钟,这样就满足了题意了。prev就要面对高精度乘法 :prev数组=prev数组*一个数(数组的每一位都要乘以这个数,还要模拟进位)(既然要逆序输出 ,所以肯定要有两个数记录两个数组的最高位 : len1 ,len2)因为要想上取整,如果是单纯的 double sum=s/v+10;一个数组prev来保存每次的乘积,一个数组sum来加上每次的乘积。

2025-11-01 12:46:30 744

原创 【Linux】Linux下基本指令:man echo cp mv move less date grep zip tar 指令以及指令的本质

如果我想看文本的最后几行,要一直往下翻,成本太高,cat更适合看小文本而,而more更适合看大文本。如果要来继续,可以按回车想要退出,可以按关键是他能带选项,可以显示到你想要看的第几行就停下。用 printf 指令 ,这里的printf是指令,和c++的printf没有一点关系,注意这里要想打印字符串就要加分号了,要不然他遇到空格就会停止打印。grep 'Linux' log.txt : 他会打开log.text,以Linux作为关键字进行过滤,一行一行的过滤,如果匹配的话就打印出来。

2025-10-28 12:00:34 966

原创 【Linux】初始Linux和Linux下基本指令:ls pwd cd touch mkdir rmdir rm 指令

一、初识Linux操作系统(OS)什么是操作系统?操作系统就像一个大管家,你不需要知道怎么管理厨房的食材、怎么打扫房间,只要告诉管家“我饿了”“我要睡觉”,他就帮你安排一切,你点个“我想看电影”,操作系统就把你的点击、滑动翻译成电脑能听懂的“0101”,再让硬件去执行操作系统为什么要做决策?一个好的操作系统的衡量指标 :稳定 快速 安全核心工作对下管理好软硬件资源的手段来达到对上提供良好的操作使用环境以上是讲Linux大致是什么 ,和它用来做什么。

2025-10-21 18:38:39 824 13

原创 C++ : 四种类型转换(static_cast,reinterpret_cast,const_cast,dynamic_cast)

综上,我们可以看到隐式类型转换的缺陷:转换的可视性比较差,所有的转换形式都是以一种相同形式书写,难以跟踪错误的转换,c++提出了自己的四种转换,可以有效的处理这些问题。,它在静态区开空间进行存储数据,变量被const进行修饰具有常性,数据不可以被修改,但是我们可以通过类型转换,通过指针去修改它存储的数据的值,但是这种修改数据的值的方式是存在安全隐患的,因为我们使用const进行修饰变量,就是不希望数据被修改。关键字进行修饰变量,被volatile修饰的变量,编译器在取它的值的时候,每次都会去内存中去取。

2025-10-16 14:05:34 1084 6

原创 C++ : 智能指针的补充和特殊类的设计

补充上节关于未讲到的智能指针的一些实践中经常出现的问题int main()return 0;这样写是没问题的,他会构造和析构,但如果这样写呢?DeleteArray<A>() : 匿名对象由于这里的虚构函数是写死的 ,这就会导致,这里有九个对象,还没有释放甚至如果说这里是mallocint main()// DeleteArray<A>()匿名对象return 0;

2025-10-12 21:00:01 939 20

原创 智能指针三部曲:unique·shared·weak 的三角恋

每个智能指针都要符合三个部分的功能,除了auto_ptr第一个部分是RAII : 构造函数的时候把这个指针保存起来,析构函数的时候,把那个指针给释放掉第一个部分: 像指针一样第三个就是拷贝问题拷贝问题auto_ptr : 产生的比较早,他的拷贝实际上是一个管理权的转移,这样就会导致被拷贝对象被置空,建议不要使用它unique_ptr : 它这个智能指针,是禁止拷贝方式,是简单粗暴,但是他相比于做到像指针一样就有缺陷了,但是如果是不需要拷贝的场景,就建议使用它。

2025-10-10 00:05:50 867 15

原创 三剑合璧:C++11 lambda、variadic template 与 wrapper 的协奏

在C++98/03,类模版和函数模版中只能含固定数量的模版参数,而C++11的新特性可变参数模板能够让您创建可以接受可变参数的函数模板和类模板,我们希望。可调用对象存储到容器比如 vector <> 中,类型咋写,是写函数指针呢,还是仿函数对象呢,又或者是lambda呢,不确定。捉列表不允许变量重复传递,否则就会导致编译错误。可以很明显看到它的函数体,可以看到它的内部是怎么比较的,而且几乎格式都一样,只需要改一下函数体中的东西。此时刚好补充了捕捉列表的知识,我们可以用捕捉列表,捕捉局部的函数,供我们使用。

2025-10-07 16:48:30 858 17

原创 C++11【左右值引用精析】

如果rr是右值,那么它是不能改变的 ,但rr此时能++,说明rr是左值 ,为什么呢 ,因为右值引用变量的属性会被编译器识别成左值,否则在移动构造的场景下,无法完成资源的转移,可以认为编译器在这里做了特殊处理,把rr强行识别成了左值 ,要不然右值是不允许修改的。这里val是右值引用,依旧被识别成了左值,所以这里_val依旧是被左值初始化的,所以在这里我们要把val是右值引用,保持右值的特性。回到上面的代码,这里的T&& t ,在实参是右值时,t是T&& 类型的,而t是左值,为什么。​​​​​​​五、源代码。

2025-10-04 00:42:05 655 8

原创 C++11新特性解析与应用

相比于C++98/03,C++11则带来了数量可观的变化,其中包含了约140个新特性,以及对C++03标准中约600个缺陷的修正,这使得C++11更像是从C++98/03中孕育出的一种新语言。C++11想统⼀数据的初始化⽅式,想实现⼀切对象皆可⽤{}初始化 ,所以ta扩大了用大括号{}括起的列表(也叫做列表初始化)的使用范围,使其可用于。(这里也可以看到实参传给函数的形参时const的作用,函数的形参要加const的修饰,这样既可以右值传过来,也可以左值传过来): move的作用是将左值转换成右值 ,

2025-10-02 15:39:37 719 13

原创 花未全开月未圆:布隆过滤器的留白美学

要使用精确算法的话,我们就不能有误判,所以说这里不能用布隆过滤器,现在要找交集,那首先要去重,所以说我们可以用set处理 ,由于内存只有1g,两个文件,那肯定要用两个set,所以平均一个set,只要用500M的内存,我们需要把文件平均分,分成600份,每个小文件就是500M,这样才能满足我们的需求,但是我们平均分成500份,我们要找出交集,那样的话,在A文件中,一个A的小文件要和B文件中所有小文件依次放入set中来找到交集 ,效率太低下了。判断字符串存不存在,整形可以直接映射到一个比特位,但字符串呢?

2025-09-29 21:53:25 771 18

原创 我的创作纪念日

在写博客的过程中,想要写好一篇好的博客,我感觉很多知识点需要进行整合,要过一遍脑子才能有逻辑的结合在一起,最以写博客也是相当于对知识点进行一个梳理,将他们有逻辑的串联在一起,从而帮助到我更好的理解。提示:你过去写得最好的一段代码是什么?提示:当前创作和你的工作、学习是什么样的关系。提示:可以和大家分享最初成为创作者的初心。嗯 ,其实是小遍理解的慢,脑袋转的慢。提示:在创作的过程中都有哪些收获。提示:职业规划、创作规划等​​。希望有朝一日能够成为一个大佬。小编也希望有一天能够站在这里。

2025-09-28 10:57:48 519 13

原创 比特之绘:位图的二进制诗学

我们通过存很多比特位,我们通过比特位上的零或一来判断该数字存不存在,由于没有大小为一的类型,所以我们只能存int的类型或者是char类型,这里选择存int类型 ,一个int是四个字节,一个字节是八个比特位 , 所以一个int是32个比特位 ,存一个int代表32个比特位 ,我们只需要将传过来的值除以32表示,看他是第几个32,然后再%上32,看他在该最后一个32内排到第几位,这样我就把那个数字的值转化为了第多少个比特位。给两个文件,分别有100亿个整数,我们只有1G内存,如何找到两个文件交集?

2025-09-27 14:35:33 753 16

原创 让风恒定:在 unordered 的荒原上种下一棵常数级的树

本文主要介绍了哈希表(HashTable)及其迭代器的实现,以及基于哈希表的unordered_set和unordered_map容器的设计与实现。重点内容包括: 哈希表节点HashNode的模板化改造,使其能够存储不同类型(key或pair<k,v>)的数据。 HashTable类的改进,增加了KeyOfT和HashFunc等模板参数,用于提取键值和计算哈希值。 HTiterator迭代器的实现,解决了哈希表遍历和桶间跳转的问题,包含const和非const版本。 unordered_set和

2025-09-25 23:30:29 699 4

原创 在键与值的缝隙里,我听见常数级的风-【哈希表】

同样以上图为例,假设我们删除了7,如果我们将7的状态置为空,此时我们想要查找15,查找的时候是查找到空结束,当状态是存在或者删除的时候仍然要继续向后寻找,那么如果删除7的时候,将7的状态置为空,使用15的关键码通过哈希函数模size10,那么算出的是5的位置,此时5的位置上的元素的状态为exist,会往后线性查找,那么会查找到7,7的状态为空 ,会直接结束,没有找到15,但是观察一下图,哈希表中明明有15,所以删除值将值的状态置为空是不可行的。它可以是任何类型的数据,比如数字、字符串、对象等,

2025-09-25 19:27:01 1288 16

原创 树影成双:红黑之下,键值有灵

一、map和set在红黑树中的真实存储解答:这是库里红黑树 的代码 ,__rb_tree_node<Value> 变成 rb_tree_node , rb_tree_node* 变成 link_type ,而在struct __rb_tree_node 中 Value value_field;

2025-09-21 13:44:21 1113 7

原创 R&B:红黑树的节奏与平衡

一、红黑树的概念红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black 通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍,因而是接近平衡的红节点不能相连每条路上的黑节点数量一致(在后续的作图中,小编一般忽略空节点)二、红黑树节点的定义三、红黑树的结构四、红黑树的Insert找位置链接节点变颜色(parent在grandfather的左边)

2025-09-19 15:36:37 1083 3

原创 C++ : AVL树-详解

接着我们进行AVL树的类模板的初始化,即需要一个root 根节点,但是使用AVL树的节点的类型AVLTreeNode<K, V>定义变量较为繁琐,为了简便将其typedef为Node , 那么我们进行AVL树的构造函数,即进行根节点的初始化,初始化的时候让AVL树的根节点为空即可。当向二叉搜索树中插入新结点后,如果能保证每个结点的左右子树高度之差的绝对值不超过1(需要对树中的结点进行调整),即可降低树的高度,从而减少平均搜索长度。满二叉树的高度是log n ,满二叉搜索数的增删查改是log n。

2025-09-07 17:50:04 1192 6

原创 红黑树下探玄机:C++ map&multimap 的幕后之旅

本文详细介绍了C++中map和multimap容器的使用。map是关联容器,存储键值对<key,value>,key用于排序和唯一标识,value存储关联内容。文章讲解了map的构造、插入(insert)、删除(erase)、查找(find)等操作,特别说明了operator[]的实现原理及其应用场景。通过示例代码演示了map的迭代器使用、范围for遍历等技巧。同时对比了multimap与map的区别,指出multimap允许key重复且不提供operator[]。最后介绍了lower_boun

2025-08-26 22:11:27 1294 10

原创 红黑树下探玄机:C++ set&multiset 的幕后之旅

在内部,set中的元素总是按照其内部比较对象(类型比较)所指示的特定严格弱排序准则进行排序,set中的元素按一定次序排序,且元素唯一,元素不能在set中被修改 (元素总是const) ,只能被插入或删除 ,set在底层是用二叉搜索树(红黑树)实现的。在使用set中,set相当于只存一个值,在set中,元素的value也标识它(value就是key,类型为T),并且每个value必须是唯一的,且set是按照一定次序存储元素的容器。也是用来存储数据的,与序列式容器不同的是,其里面存储的是。

2025-08-26 16:55:47 1075 7

原创 【万字精讲】 左枝清减·右枝丰盈:C++构筑的二叉搜索森林

本文系统介绍了二叉搜索树(BST)的概念、实现和应用。主要内容包括:1. BST的特性:左子树值小于根节点,右子树值大于根节点;2. 核心操作:查找、插入和删除(包括直接删除和替换法删除);3. 递归和非递归实现方式;4. K模型和KV模型两种应用场景,如单词查询和统计;5. 通过"年龄分房酒店"的生动比喻解释BST的工作原理。文中提供了完整的C++模板实现代码,包括节点结构、树类定义及各种操作方法,并讨论了BST可能退化成链表的问题及AVL/红黑树等改进方案。

2025-08-15 17:30:59 750 1

原创 虚舟泛型:当C++多态在语言的镜渊里照出千万个自己

1.什么是多态?答:多态就是“同一种行为,不同对象表现出不同形态2.什么是重载、重写(覆盖)、重定义(隐藏)?答:重载:同一作用域内,函数名相同但参数不同。重写(覆盖):子类重新定义父类的虚函数,实现多态。重定义(隐藏):子类定义与父类同名函数(非虚),隐藏父类版本。3.多态的实现原理?答:通过 虚函数表实现。编译器为每个有虚函数的类创建一个函数指针数组,对象中隐藏一个指向该表的指针(_vfptr)。调用虚函数时,通过_vfptr查表找到实际函数地址,实现运行时动态绑定。4.

2025-08-14 19:44:31 744 1

原创 代码的世袭:当C++把岁月写成基类

继承机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象 程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继 承是类设计层次的复用。

2025-08-12 21:57:03 820

原创 霜刃与千面:C++模板的诗性解构

class 类模板名// 类内成员定义以上就是今天小编要讲的内容,本文简单介绍了模板的相关知识,模板复用了代码,节省资源,更快的迭代开发,C++的标准模板库(STL)因此而产生,同时也增强了代码的灵活性。

2025-08-05 19:06:41 972

原创 C++ : 反向迭代器的模拟实现

二、反向迭代器的介绍 反向迭代器是一个模板类,外界传什么类型的iteator,它就要适配出该类型的反向迭代器,所以,ta 也是一个适配器,即适配正向迭代器达到反向遍历的效果,通过对正向迭代器实例化出的对象的接口进行封装进而达到反向遍历的效果 ,当正向迭代器的- -时,反向迭代器++,正向迭代器的++,反向迭代器的- - 在这个反向迭代器中涉及到返回引用和地址的const/普通对象,所以我们传模版,Ref - T&/const T&, Ptr - T*/const T*,更方便

2025-08-03 19:57:17 690

原创 C++ : priority_queue优先级队列的介绍与模拟实现

优先队列是一种容器适配器,根据严格的弱排序标准,它的第一个元素总是它所包含的元素中最大的。priority_queue 类似于堆,堆中可以随时插入元素,并且只能检索最大堆元素(优先队列中位于顶部的元素)。优先队列被实现为容器适配器,容器适配器即将特定容器类封装作为其底层容器类,queue提供一组特定的成员函数来访问其元素。元素从特定容器的“尾部”弹出,其称为优先队列的顶部。底层容器可以是任何标准容器类模板,也可以是其他特定设计的容器类。

2025-07-31 18:29:17 682

原创 C++ : stack和queue 的介绍和实现

stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作容器适配器 : 对特定类进行封装作为底层容器,提供一组特定的成员函数来访问其元素,将特定类作为其底层的,元素特定容器的尾部(即栈顶)被压入和弹出stack的底层容器可以是任何标准的容器类模板或者一些其他特定的容器类,这些容器类应该支持以下操作:empty:判空操作back:获取尾部元素操作。

2025-07-30 16:56:51 1031

原创 C++ : list的模拟

找到pos前的节点位置,这里保存一下pos迭代器中的节点指针指向的前一个节点的指针_prev即可找到pos前的节点位置prev ,用new去申请一个值为val的节点作为要插入的新节点newnode,同时由于插入了一个节点,那么_size也应该对应加1。erase——初始状态无论有数据节点还是没有数据节点,这里的头节点都存在,不能被删除,所以应该使用asseert断言一下pos不等于头节点 ,删除一个节点之后list对象中的有效节点个数_size应该对应减一 ,必须是引用传参的形式,否则会造成无穷递归 ,

2025-07-25 18:54:04 1036

原创 C++的“链”珠妙笔:list的编程艺术

前言前言在 C++ 标准模板库(STL)中, list 是一个非常强大且灵活的容器。它基于双向链表实现,提供了高效的插入和删除操作,非常适合需要频繁修改数据的场景。小编将详细介绍 list 的特性、操作方法以及一些使用示例,帮助你更好地理解和掌握这个容器一、 list的介绍list的结构。

2025-07-21 18:28:32 1154 1

原创 C++ :vector的模拟

以上是博客的全部内容, 小编希望对各位读者朋友们有帮助。

2025-07-19 17:13:16 717

原创 C++ :vector的介绍和使用

vector的使用场景:动态数组需求当需要一个大小可动态变化的数组时, vector 是理想的选择。它能够根据元素的添加和删除自动调整内存分配,避免了手动管理内存的复杂性。高效的随机访问 vector 支持高效的随机访问,通过索引可以快速获取任意位置的元素。这使得它在需要频繁随机访问元素的场景中非常高效。与其他STL算法配合 vector 作为STL容器,能够无缝地与STL算法(如排序、查找等)配合使用,从而实现复杂的数据处理逻辑。

2025-07-18 22:44:16 949

原创 弦歌不绝:【string 的使用】代码世界的字符之舞

STL(standard template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架2. STL的版本 :原始版本Alexander Stepanov、Meng Lee 在惠普实验室完成的原始版本P. J. 版本由P. J. Plauger开发,继承自HP版本,被Windows Visual C++采用,不能公开或修改,缺陷:可读性比较低,符号命名比较怪异RW版本。

2025-06-02 20:21:04 925 3

原创 C++:类和对象(下)---镜中万象:C++类的抽象之境与对象的具体之象

三个角度详解了一下初始化列表为了引出explicit关键字,我们引入了隐式转化的概念,先分析的隐式转化,再引出explicit关键字,在static成员中,我们叙述了概念以及分条讲解了它的成员特性,在友中,我们从友元函数以及友元类那两个方面讲解,同时引出了内部类的概念。(ps:其实感觉无论是构造函数还是拷贝构造函数,他们的完全体应该前面都写初始化,因为初始化不仅可以初始化,它本身也是一种赋值,在函数内赋值时,可以直接在初始化的时候就赋值,然后初始化完成不了的事情再交给函数里面去做)因为cout的输出流对。

2025-05-13 20:29:59 760 9

原创 C++:类和对象(中)---镜中万象:C++类的抽象之境与对象的具体之象(万字精讲)

补充了this指针,详解了类的六个默认成员函数,最后完整的实现了日期类。

2025-05-05 19:58:39 874 8

原创 C++:类和对象(上)---镜中万象:C++类的抽象之境与对象的具体之象

每个根据相同的类,就好比喻,图纸创建出了不同对象中在每个对象中成员变量是不同的,而成员函数几乎是相同的,都在做相同的事,成员变量就好比寝室里的每个人的床,而成员函数就好比洗水池,不需要每个人都有一个洗水池,只需要创建一个洗水池即可,成员变量创建一次成员,函数创建一次,每个对象都保存了一份相同的代码,也就是成员函数的代码相同,代码保存多次会浪费空间,所以计算类的大小时只需在乎成员变量,不用在乎成员函数。和class定义类是一样的,区别是struct定义的类默认访问权限是public,class定义的类。

2025-04-26 21:01:21 1165 18

空空如也

空空如也

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

TA关注的人

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