- 博客(125)
- 收藏
- 关注
原创 C++入门自学Day17-- 模版进阶知识
本文深入探讨了C++模板与继承两大核心特性。在模板部分,详细介绍了函数模板、类型推导、非类型模板参数、重载/特化等基础概念,以及完美转发、折叠表达式、变参模板等进阶技巧,并分析了模板分离编译的三种解决方案。提供了大量工程实践中的常见陷阱与最佳实践建议,适合作为C++中高级开发者的技术参考。
2025-09-02 11:25:55
827
原创 C++入门自学Day16-- STL容器类型总结
本文系统总结了C++常用STL容器的特性与适用场景,涵盖string、vector、deque、list、stack、queue、priority_queue。重点分析了各容器的底层实现、常用接口、复杂度、迭代器失效规则及内存特性。;vector是最省内存的连续数组;deque支持两端高效操作;list适合稳定迭代器的中间插删;三大适配器提供特定语义接口。核心建议:优先选用vector,根据需求(随机访问/两端操作/中间插删/优先级)选择其他容器,注意迭代器失效问题。
2025-08-21 21:55:21
1257
原创 C++入门自学Day15-- priority_queue的自实现(二叉堆)
本文从零实现了一个基于二叉堆的优先队列模板类my_priority_queue<T, Compare>,重点讲解了仿函数在优先级比较中的应用。通过Less和Greater两个仿函数模板实现了最大堆和最小堆,详细说明了堆的调整算法(Adjust_up和Adjust_down)及其时间复杂度(O(logn))。文章还探讨了仿函数的优势(可内联、可携带状态)、自定义比较器的实现方法,以及如何利用最小堆解决Top-k问题。该实现可直接替代标准库的priority_queue,具有教学和实用价值。
2025-08-20 16:32:47
1152
原创 C++入门自学Day14-- priority_queue类型使用和介绍(初识)
本文介绍了C++标准库中的优先队列(priority_queue)。优先队列是一种按优先级而非插入顺序服务的抽象数据结构,基于堆(heap)实现。文章详细讲解了priority_queue的接口与语义、底层实现原理(二叉堆)、常用操作及复杂度分析,并比较了优先队列与普通队列的差异。重点内容包括:如何自定义比较器实现最小堆/最大堆、pair类型的使用方法(如Dijkstra算法)、常见使用误区以及性能优化建议。最后通过代码示例展示了优先队列的实际应用场景,如Dijkstra算法和top-k问题。
2025-08-20 14:12:09
831
原创 C++入门自学Day14-- deque类型使用和介绍(初识)
本文介绍了C++ STL中的双端队列std::deque,主要内容包括: deque的定位和特点:支持随机访问和两端高效插入/删除,介于vector和list之间; 内部实现模型:采用分段缓冲区和中央索引表的结构,保证逻辑连续性和两端扩展性; 常用接口和复杂度:提供两端O(1)操作和随机访问,中间操作效率较低; 迭代器和引用失效规则:两端操作可能使迭代器失效但引用保持,中间操作通常使两者都失效; 作为stack和queue默认底层容器的原因:完美匹配它们的基本操作需求; 使用建议和常见陷阱,强调根据实际场景
2025-08-19 21:40:14
721
原创 C++入门自学Day14-- Stack和Queue的自实现(适配器)
本文介绍了C++中容器适配器Stack和Queue的自实现方法。主要内容包括:1) 适配器设计思想,通过组合底层容器实现受限接口;2) Stack和Queue的具体实现,包括接口设计、底层容器约束(Stack支持vector而Queue不支持);3) 复杂度分析、异常安全处理和引用有效性;4) 底层容器选择建议(deque综合性能最优);5) 常见工程实践建议,如避免继承、添加调试断言等。文章通过自实现这两个适配器,深入解析了STL"以语义约束能力"的设计理念,以及组合优于继承的工程实践
2025-08-19 18:42:30
882
原创 C++入门自学Day14-- Queue介绍和使用
本文介绍了C++ STL中的队列(queue)容器适配器。主要内容包括:1. queue的基本概念和底层实现原理,默认使用deque作为底层容器;2. queue的常用接口及其时间复杂度;3. queue的典型应用场景如BFS算法和任务调度;4. 使用中的常见注意事项;5. 如何手写简化版队列适配器。文章强调queue作为容器适配器的特性,不提供遍历功能,只支持FIFO操作,并对比了不同底层容器的选择场景。最后指出理解queue的设计有助于掌握容器适配器模式的思想。
2025-08-19 16:19:29
1318
原创 Leetcode刷题营:Stack类相关算法题
【LeetCode刷题营回顾】涵盖栈、向量和字符串相关题目,包括第31-42题。重点解析了两个栈相关问题:1) JZ31题通过模拟栈操作验证弹出序列合法性;2) 150题用栈实现逆波兰表达式求值,遇到数字入栈,遇到运算符取出栈顶元素运算后重新入栈。两个问题都展现了栈"后进先出"的特性,分别通过压入弹出序列匹配和运算顺序控制来解决问题。代码实现均采用C++的stack容器,前者验证序列,后者计算表达式值。测试用例验证了算法的正确性,如逆波兰表达式"10 6 9 3 + -11 *
2025-08-19 15:00:18
869
原创 Leetcode刷题营:Stack类相关--第42题
本文介绍了LeetCode第155题最小栈;的两种解法。第一种方法使用两个栈分别存储数据和当前最小值,通过同步操作实现O(1)时间获取最小值,但空间复杂度较高。第二种差值法仅使用一个栈存储元素与最小值的差值,通过动态更新最小值来优化空间效率。两种方法都能满足题目要求的常数时间操作,方法二在空间复杂度上更优。测试用例验证了两种实现方式的正确性,包括push、pop、top和getMin操作的组合测试。
2025-08-18 21:33:44
1098
原创 C++入门自学Day13-- Stack介绍和使用
摘要:本文介绍了C++ STL中的stack(栈)容器,重点讲解了其先进后出(LIFO)的特性、基本使用方法及底层实现原理。文章内容包括:1)stack的定义与基础操作(push/pop/top等);2)底层容器适配器特性,默认基于deque实现;3)常用接口说明;4)典型应用场景如括号匹配、表达式求值等,并提供了括号匹配的代码示例。最后总结指出,理解stack有助于掌握STL设计思想及数据结构中的栈应用。
2025-08-18 19:35:11
853
原创 C++入门自学Day11-- String, Vector, List 复习
本文详细介绍了string、vector和list三种C++容器的自实现过程。在string部分,重点讲解了构造函数、内存管理(resize/reserve)、增删查改操作以及运算符重载的实现。vector部分展示了模板类的构造析构、内存管理、元素操作和迭代器实现。list部分则详细说明了双向链表结构、迭代器设计以及链表特有操作如splice的实现。通过自实现这些容器,可以深入理解C++内存管理、指针操作和迭代器机制等核心概念,同时体会STL设计在性能、内存和灵活性之间的权衡。这种实践是学习现代C++编程的
2025-08-17 17:41:07
1387
原创 昇腾AI自学Day2-- 深度学习基础工具与数学
本文从深度学习实践视角介绍PyTorch线性代数基础,涵盖关键概念与高效实现。主要内容包括:(1)线性代数核心概念的几何理解,如矩阵乘法、SVD分解、正定矩阵等;(2)NumPy基础运算与PyTorch迁移方法,强调优先使用solve/lstsq而非直接求逆;(3)torch.linalg模块的高性能实现,支持GPU加速、自动求导与批量计算;(4)通过最小二乘回归案例对比NumPy与PyTorch实现。文章特别指出深度学习计算本质是线性代数运算,并提供工程实践建议:避免显式求逆、使用Cholesky分解、添
2025-08-16 23:12:37
1529
原创 昇腾AI自学Day1-- 深度学习基础工具与数学
本文介绍了PyTorch中张量(Tensor)的基础操作,主要包括:1)张量是多维数组,支持GPU计算和自动微分;2)创建方法包括直接创建、全零/全一初始化、随机分布等;3)基本操作涵盖索引切片、维度变换、拼接拆分等;4)支持与NumPy数组相互转换;5)可通过CUDA实现GPU加速计算。掌握这些张量操作是使用PyTorch进行深度学习的基础,为后续构建神经网络模型奠定基础。
2025-08-15 15:31:35
1123
原创 Linux系统编程Day14 -- 进程控制(了解)
本文深入探讨Linux进程管理中的fork()系统调用,包括其工作原理、执行流程和应用场景。文章详细解析了fork()如何创建子进程,包括虚拟地址空间复制、写时复制机制以及父子进程的区别。同时介绍了进程终止的多种方式(正常/异常终止)及其资源回收机制,并重点讲解了进程等待的概念与方法,包括wait/waitpid等系统调用及其参数配置。此外,文章还提供了避免僵尸进程的实用策略,如信号处理、非阻塞轮询等,为开发者进行多进程编程提供了全面的技术指导。
2025-08-14 21:35:12
909
原创 C++入门自学Day11-- List类型的自实现
本文介绍了如何从零开始实现C++ STL中的list容器。主要内容包括:1. 链表节点结构设计,采用带哨兵位的双向循环链表简化边界处理;2. 迭代器实现,通过重载运算符使其支持STL风格的遍历;3. 核心接口实现(push_back、push_front、insert、erase等);4. 拷贝构造与赋值运算符的深浅拷贝问题;5. 迭代器失效特性分析,与vector、string等连续存储容器的对比。文章还总结了vector和list的核心区别,并提供了常见面试题的解答。通过手动实现list容器,可以深入理
2025-08-14 18:43:53
1126
原创 C++入门自学Day11-- List类型(初识)
本文深入解析了C++标准库中的std::list双向链表容器。与vector/string等连续存储容器不同,list采用节点式存储,每个元素独立分配内存并通过指针连接,这使得其在中间插入/删除操作上具有O(1)时间复杂度优势,且迭代器和引用保持稳定。文章详细对比了list与vector的特性差异,介绍了list的构造、遍历、插入删除等基本操作,重点讲解了其特有的splice、merge、sort等节点级算法的高效性,并分析了迭代器失效规则。
2025-08-14 10:23:21
565
原创 Linux系统编程Day13 -- 程序地址空间(进阶)
本文回顾了操作系统中的进程地址空间管理机制。首先介绍了程序地址空间的典型布局,包括栈区、堆区、数据段、BSS段和代码段等区域及其特性。然后阐述了虚拟内存的作用,包括内存保护、扩展性、共享机制和简化编程等优势。重点分析了进程管理如何通过PCB(进程控制块)和mm_struct结构来分配和管理地址空间,详细说明了fork()创建进程时的写时复制机制。最后总结了操作系统通过虚拟地址空间、页表映射和按需分配等机制实现的内存管理策略,确保进程间的隔离性和系统的稳定运行,概括了进程地址空间管理的核心概念。
2025-08-13 22:28:09
711
原创 C++入门自学Day10-- Vector类的自实现
本文介绍了C++中vector容器的自实现过程,重点讲解了动态内存管理、构造与析构、元素访问、插入删除等核心功能的实现方法。通过手动实现简化版vector,深入探讨了模板编程、迭代器支持和异常安全等关键概念。文章特别强调了深浅拷贝的区别,指出浅拷贝可能导致的双重释放和数据共享问题,并提供了正确的拷贝构造实现方案。最后对比了vector和list的特性,分析了。这种自实现方式有助于理解STL容器的底层原理和内存管理机制
2025-08-13 15:31:52
1297
原创 Linux系统编程Day13 -- 程序地址空间
本文深入探讨了程序地址空间的结构及其与进程管理的关联。程序地址空间由栈(向下增长)、堆(向上增长)、BSS段、数据段和代码段组成,采用虚拟地址机制实现内存管理。通过fork()创建子进程时,操作系统采用写时复制(COW)技术,使父子进程共享相同虚拟地址但对应不同物理内存,系统会分配新物理页,保证进程间内存隔离。程序地址空间机制是进程管理的核心,包括:实现进程内存隔离、支持进程切换时的地址空间转换、提供内存保护(以及通过共享内存实现进程通信。这种虚拟内存管理方构成了现代操作系统多任务处理的基础保障。
2025-08-12 22:59:29
1103
原创 C++入门自学Day10-- Vector类(注意事项)
摘要:本文深入探讨C++中vector容器的使用注意事项,重点分析了迭代器失效问题及其解决方案。文章列举了常见错误场景,如扩容导致的迭代器失效、删除元素时的迭代器更新问题,并给出正确写法。同时介绍了性能优化技巧(如reserve预分配)、边界检查方法以及初始化方式的区别。最后总结了vector的核心特性:size与capacity的差异、reallocation的影响、insert/erase操作的迭代器失效范围,以及推荐使用erase-remove惯用法进行高效批量删除。掌握这些关键点能有效避免vecto
2025-08-12 15:20:32
760
原创 Leetcode刷题营:Vector类相关--第41题
本文重点讲解了两道经典算法题的解法。第一题是260题"只出现一次的数字III",要求找出数组中仅出现一次的两个数字,通过异或运算和分组处理实现线性时间复杂度。第二题是118题"杨辉三角",利用vector动态生成指定行数的杨辉三角,每行数字由上一行相邻两个数字相加得到。两题均提供了C++实现代码,展示了vector容器在算法解题中的灵活应用。
2025-08-12 14:00:48
922
原创 Leetcode刷题营:Vector类相关--第40题
摘要:本文回顾了LeetCode刷题营中关于找出数组中只出现一次数字的两道题目。136题要求在其余元素均出现两次的数组中找到唯一出现一次的数字,可通过异或运算实现(a^a=0,0^a=a)。LCR004题则针对元素出现三次的情况,提出通过统计二进制位1出现次数并对3取模的解法。两题均给出了C++实现代码,前者使用异或遍历,后者利用32位数组统计各二进制位出现次数。这类问题考验位运算技巧,适合锻炼算法思维。
2025-08-11 21:43:12
376
原创 Linux系统编程Day12 -- 环境变量(初识)
本文详细介绍了Linux环境变量和命令行参数的概念与应用。环境变量作为系统配置参数,影响程序运行方式,可通过env、printenv等命令查看,使用export设置,unset删除,并可通过配置文件永久保存。文章还讲解了C语言中通过getenv()函数和environ变量获取环境变量的方法,以及命令行参数的传递机制(通过main函数的argc和argv参数)。通过实例代码展示了如何利用环境变量控制程序权限、实现pwd命令等功能,并解释了Shell变量与子进程继承的关系。最后总结了环境变量与命令行参数在程序配
2025-08-11 20:35:07
998
原创 AI基础与实践专题:PyTorch实现线性回归
本文介绍了基于线性回归的房价预测模型实现。通过PyTorch框架,从数据准备、特征工程到模型构建与训练,详细讲解了房价预测的完整流程。文章首先阐述了线性回归的数学原理及其与神经网络的关系,然后使用加州房价数据集进行实战演示,包括数据标准化处理、训练测试集划分、损失函数定义和梯度下降优化。实验部分展示了模型训练过程中的损失变化曲线,并强调了避免数据泄露等关键注意事项。该案例不仅展示了线性回归的基础应用,也为后续更复杂的预测模型奠定了基础。
2025-08-11 16:00:25
1141
原创 AI基础与实践专题:PyTorch实现手写数字识别
本文介绍了使用PyTorch实现MNIST手写数字识别的完整流程。首先通过数据加载和预处理(包括转换为张量、数据增强等)准备MNIST数据集。然后构建了一个包含输入层、隐藏层和输出层的多层感知机模型,使用ReLU激活函数和Softmax分类器。在训练过程中采用交叉熵损失函数和Adam优化器,通过前向传播、损失计算、反向传播和参数更新四个步骤迭代优化模型。实验结果显示该模型在测试集上达到97%的准确率。文章还探讨了改进方向,如使用卷积神经网络、引入正则化技术等。这个案例展示了深度学习从数据准备到模型训练的全过
2025-08-11 13:14:18
1184
原创 C++入门自学Day8-- 初识Vector
本文详细介绍了C++标准库中的vector容器,从C语言数组的局限性出发,对比分析了vector的动态大小、随机访问和安全特性等优势。文章系统讲解了vector的基本用法、常用成员函数、构造初始化方法、容量管理、元素访问和修改操作,并深入剖析了其底层实现原理和扩容机制。此外,还介绍了vector与算法库的联动以及与C数组的互操作方法。vector作为现代C++编程中最常用的动态数组容器,兼具数组的高效和动态管理的灵活性,是提升代码质量和开发效率的重要工具。
2025-08-10 20:07:01
1267
原创 Linux系统编程Day11 -- 进程状态的优先级和特性
本文介绍了操作系统进程管理的核心概念。主要内容包括:1) 进程的7种状态(新建、就绪、运行、阻塞等)及其转换过程;2) 进程优先级机制,包括Linux中的静态优先级和Nice值调整;3) 特殊进程类型(僵尸进程和孤儿进程)及其产生机制;4) 进程的重要特性:竞争性、独立性、并行与并发。通过代码演示和状态转换图,系统阐述了操作系统如何管理进程生命周期,合理分配CPU资源。文章还提供了查看和调整进程优先级的实用命令,帮助读者理解操作系统任务调度的基本原理。
2025-08-10 16:41:25
1070
原创 Linux系统编程Day11 -- 进程属性和常见进程
本文系统介绍了操作系统中的进程管理机制。主要内容包括:1)进程的8种关键状态(新建、就绪、运行、阻塞、终止、挂起、僵尸、停止)及其转换关系;2)进程的常见属性如PID、状态标识、程序计数器等;3)进程的5种主要类型(系统进程、用户进程、守护进程、僵尸进程、孤儿进程);4)进程管理的核心机制,包括调度、切换和同步通信。通过实际代码示例演示了进程状态转换,帮助理解操作系统如何进行多任务管理和资源分配。掌握这些知识对深入理解系统原理和优化程序性能至关重要。
2025-08-10 14:29:31
1157
原创 AI基础与实践专题:PyTorch深度学习入门
本文回顾了AI基础与实践专题中关于PyTorch的解析内容。PyTorch作为Facebook推出的深度学习框架,凭借动态计算图、Pythonic编程风格和强大的GPU加速能力,已从科研小众框架成长为深度学习主流选择。文章详细介绍了PyTorch的核心功能模块(张量计算、自动求导、神经网络构建等),并对比了其与TensorFlow的差异,指出PyTorch在灵活性、调试友好性和社区生态方面的优势。最后强调PyTorch凭借其科研友好特性和工业落地潜力,已成为当前深度学习领域的首选框架。
2025-08-10 12:13:35
1145
原创 Linux系统编程Day10 -- 进程管理
本文从数据结构视角解析计算机软硬件管理机制,重点介绍了进程管理原理。操作系统通过维护进程控制块(PCB)等数据结构实现资源管理,硬件资源被抽象为队列、链表等结构进行调度。详细阐述了计算机系统的分层架构(硬件层、驱动层、内核层等)以及进程创建流程(fork系统调用原理)。通过示例代码演示如何获取进程ID、查看系统进程状态,并分析进程与程序的区别。文章还讲解了进程调度机制和父子进程关系,揭示了操作系统通过数据结构管理资源的核心思想。
2025-08-09 21:12:34
941
原创 AI基础与实践专题:神经网络基础
本文系统介绍了神经网络的基本原理和核心概念。首先阐述了神经网络的生物启发背景和基本结构(输入层、隐藏层、输出层),重点讲解了前向传播、激活函数(Sigmoid、ReLU、Tanh等)和反向传播算法等关键机制。然后详细分析了线性模型、感知机及其区别,并介绍了损失函数、优化目标和过拟合问题。最后概述了常见的深度神经网络类型,包括MLP、CNN、RNN、GAN等,全面展示了神经网络从基础理论到实际应用的发展脉络。
2025-08-09 17:20:16
1199
原创 C++入门自学Day7-- String类的自实现
本文介绍了C++标准库中的std::string类及其自定义实现。std::string是C++提供的字符串类,封装了字符数组,支持动态内存管理,具有安全性和便捷性。文章详细讲解了std::string的构造函数、基本属性、内存管理、字符访问、字符串操作、C字符串转换等功能。同时,给出了自定义string类的实现方案,包括成员变量定义、构造/析构函数、内存管理函数、字符串操作函数(如append、insert、erase等)以及运算符重载等。通过对比标准库和自定义实现,展示了string类的核心功能和实现原
2025-08-09 15:43:47
1268
原创 Linux系统编程Day9 -- 理解计算机的软硬件管理
这篇文章回顾了计算机科学的基础知识,主要包括:1.冯·诺依曼体系结构,阐述了其五大组成部分(运算器、控制器、存储器、输入/输出设备)及工作原理;2.操作系统的基本概念,介绍了其在硬件管理、资源调度等方面的功能;3.两者的关系,说明操作系统如何基于冯·诺依曼结构实现硬件抽象和管理。此外,文章开头还列出了编程相关的往期内容,包括调试工具、Git、Linux系统编程等知识。全文系统性地梳理了计算机体系结构和操作系统的基础理论。
2025-08-08 19:08:01
1117
原创 Linux系统编程Day9 -- gdb (linux)和lldb(macOS)调试工具
本文介绍了Linux和macOS下两款主流调试工具GDB和LLDB的使用方法。GDB是Linux/Unix环境下的经典命令行调试器,支持设置断点、单步执行、变量查看等功能,需配合-g参数编译使用。LLDB是macOS/iOS平台的默认调试器,提供现代化调试体验,支持代码补全、Python脚本等高级功能。文章详细对比了两者的优缺点:GDB跨平台性强但macOS支持有限,LLDB对Apple生态支持更好但主要限于macOS环境。最后给出了两者的基本调试流程和常用命令对照表,帮助开发者根据平台选择合适的调试工具。
2025-08-08 18:17:07
1310
原创 AI大模型专题:LLM大模型(Prompt提示词工程)
本文系统介绍了大语言模型的Prompt提示词工程,阐述了其核心概念与技术方法。Prompt工程通过设计优化的输入文本,引导模型生成高质量输出,包括零样本提示、思维链提示等7种技术方法。文章详细解析了Prompt的4种基本类型(直接式、指令式等)和5个设计技巧,并提供了DeepSeek平台的实现示例。此外,还介绍了RACE、AIDA等5种主流结构化Prompt框架及其适用场景,为优化大模型输出提供了系统方法论。提示词工程在文本摘要、情感分类等NLP任务中具有重要应用价值。
2025-08-08 15:39:43
1282
1
原创 Leetcode刷题营:字符串相关--第39题
本文介绍了LeetCode字符串相乘问题的两种解法。第一种将乘法转化为加法,通过循环相加实现,但效率较低。第二种采用竖式乘法,通过位相乘和进位处理实现,时间复杂度O(n²),支持大整数运算。文章提供了C语言和C++的实现代码,其中C++版本利用string类简化处理。两种方法都避免了直接转换为整数,满足题目要求。关键点在于正确处理进位和去除前导零。
2025-08-08 13:48:16
460
原创 AI大模型专题:LLM大模型(初识)
大语言模型(LLM)是基于Transformer架构的神经网络模型,通过海量文本数据训练实现语言理解与生成。其训练分为三个阶段:预训练阶段通过自监督学习掌握语言规律;监督微调(SFT)阶段使用标注数据使模型适应特定任务;基于人类反馈的强化学习(RLHF)阶段优化模型输出以符合人类价值观。与传统神经网络相比,LLM具有更大参数量(亿级到万亿级)、更强通用能力(对话、写作等)和更复杂的训练流程。这种规模化训练使LLM展现出超越传统模型的智能特性。
2025-08-07 21:11:31
1058
原创 Leetcode刷题营:字符串相关--第37,38题
本文分享了LeetCode刷题营中字符串相关题目的解题思路与代码实现。重点解析了125题验证回文串和415题字符串相加两个经典问题。对于回文串验证,介绍了两种方法:字符串翻转比较法和双指针法,并提供了C和C++的实现代码。字符串相加问题则采用逐位相加处理进位的方式,给出了C语言和C++的解决方案。文章通过具体示例展示了算法处理过程,帮助读者理解如何在不使用内置库的情况下实现字符串操作。这些解题思路对提升算法能力和处理字符串问题具有实用价值。
2025-08-07 20:33:46
1013
原创 C++入门自学Day7-- String类的使用(续)
在调用字符串中查找 str 从 pos 开始出现的位置。如果找不到,返回 string::npos。
2025-08-07 16:46:01
880
原创 Linux系统编程Day8 -- Git 教程(初阶)
本文介绍了Git版本控制系统的基础知识与应用。主要内容包括:Git的分布式特性与核心优势(分支管理、高效协作);工作区、暂存区和本地仓库的三区工作原理;Git安装配置与基本操作(init/add/commit/log等命令);GitHub远程仓库的创建与关联方法;常用Git命令速查表(仓库管理、分支操作等);以及Git在版本控制、团队协作等场景的实际应用。强调通过日常实践(提交、推送、解决冲突等)来掌握Git技能,建议开发者建立GitHub项目档案持续积累经验。
2025-08-07 14:21:40
885
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅