自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++——vector介绍及使用详解

vector是我们C++中会经常使用的一个容器类型,可以将其理解成一个可变换大小的数组。因此,vector也是采用连续存储空间对数据进行存储,可以使用下标对其进行访问,但是与数组有区别的在于,其大小可以动态改变的。

2021-04-10 14:51:57 527

原创 C++基础入门 String常用接口的底层模拟

常见构造接口及实现以下为部分讲解代码,具体代码详见文末完整代码代码实现· 1.经典写法class _string{public: //默认没有参数的构造 _string()//至少开辟一个空间存档'\0',这样不会指向空 :_data(new char[1]) { _data[0] = '\0'; } //全缺省构造函数 _string(const char* ch = "") :_data(new char[strlen(ch)+1])//为_data开辟空间,包括最后

2021-03-28 16:17:52 153

原创 C++入门基础(十二) string类的常用接口

类的出现是对于C语言中的str系列库函数的升级版,主要是用来处理一系列字符串类型的操作,具有相当大的作用,这里我们介绍其几个常用的接口,并在下一篇文章中通过代码模拟出其在底层的实现。

2021-03-27 23:17:37 348

原创 C++入门基础(十一) STL介绍

在学习完之间C++模板的相关知识之后,我们仿佛打开了一个新世界的大门,原来代码还可以这样用,但是问题又来了,即使是有模板了但是这个模板还要写出来,这样是不是太麻烦了,好像还没有到达懒的真正境界,那么为了满足大部分懒人的需要,惠普实验室来了一手绝活,他们将大量的函数模板、算法等等全部进行总结归纳,编写写成了一个巨大的仓库,这样程序员们在使用时只要调用相关函数接口便可以省下大把的头发,这个库就是我们长常说的STL标准模板库。

2021-03-27 12:13:58 507

原创 C++入门基础(十) 模板、类模板、模板函数总结

前言 &emsp有句话是这么说的:世界是由懒人创造的,在我们的计算机世界中同样如此。我们之前说到,为了将同一个功能的实现简单化,我们学习了重载的相关知识,但是重载也有一个缺陷,就是需要将不同类型的变量所对应的函数一 一写出,就比如我们想要实现两个数的交换,那么问题来了,这个数有int、double、char等等类型,如果要满足任意类型的交换是不是要写好多的重载函数?那完全大可不必,为了方便绝大多数的“懒人”,C++便又推出了一项黑科技——模板,在定义函数时我们先不规定是什么类型的,只要你来我都可以

2021-03-22 22:21:00 158

原创 Linux --僵尸进程

概念  僵尸进程,Linux中记为 Z 是进程运行时可能会出现的有一种状态,其是当进程退出时父进程本没有读取到子进程退出的返回代码,也就是说,子进程先于父进程结束,而父进程并没有回收子进程,进行占用资源的释放,这个时候该进程便成为了僵尸态。表现  当僵尸进程产生之后,该进程便会以终止状态保持在进程表中,并且会一直等待父进程读取退出状态代码。僵尸进程的危害僵尸进程出现后必会有子进程以终止状态保持,不上不下的。占用资源,产生内存泄漏每一个内核创造进程的数量是有一定的,处于僵尸态的进程不进行回收会

2021-03-20 15:50:29 141

原创 Linux 知识点归纳(一) 进程概念 以及 查看进程的方法

   在我们学习Linux的进程的相关知识之前首先要了解一点基础性的知识。一、冯·诺依曼体系结构首先要先知道一种经典的计算机体系结构——冯·诺依曼体系结构,是现代计算机的硬件体系结构,这里不再赘述,具体详见百度百科:冯·诺依曼体系结构如以下经典结构图:[图片源自百度]通过了解我们可以知道以下几个特点:[1].计算机处理的数据与指令全部都采用二进制的形式表示[2].该结构下是顺序执行程序、[3].计算机硬件方面主要由运算器、控制器、存储器、输入设备和输出设备五大部分组成[4]运算器和处理

2021-03-20 12:31:39 235

原创 C++入门基础(九) new & delete

前言  在内存的应用中,我们继续深入展开。内存是如何开辟的?我们知道在编写程序之后,编译器会自动的给变量、常量数据、静态数据等给予对应的内存空间作为储存,而当我们的程序稍微复杂一点,需要进行有意识的根据不同场景开辟不同大小的空间去使用,该如何实现呢?因此在这里我们有一个概念叫做空间的动态开辟,在C语言中我们会使用malloc、calloc或者realloc去进行一定大小空间的开辟,使用free在最后对开辟的空间进行释放。这些方式在C++中同样适用,但是在有一些特殊的地方使用起来往往比较麻烦有时甚至无法使用

2021-03-18 17:56:08 225

原创 C++入门基础(八) 内存分布一览

  内存,一个看不见也摸不着的东西,我们每天都在接触它但是却很少真正去了解过它。在我们学习程序语言时,是不是经常会接触内存泄漏、动态开辟、地址等等的词语?是的,它们均与我们所说的内存有着千丝万缕的关系,今天,我们便走进内存,简单了解其基本的构造。内存的六大分区  我们常说的内存分区一般有两种分法,其一是常说的五大分区,分别是堆、栈、自由存储区、全局/静态存储区以及常量存储区;而另一种我们说是六大段,其分别是内核空间、栈、内存映射区、堆、数据段、代码段。内核空间  通常,计算机会在默认情况在将高地址的

2021-03-17 23:46:06 140

原创 C++入门基础(七) 友元 友元函数 友元类

  我们都知道,C++是一种面向对象的语言,在之前的内容中我们说过,为了区别成员变量不同的访问权限,C++采用了三种不同的权限限定符(分别是:public,private,protect)以满足不同用户的访问需求,同时对一些重要的成员进行保护。但是在这看似美妙的外表下同时也蕴含着一些小问题,就比如今天我们要引出的一个概念——友元。  在一般情况下,我们允许类中的一些特定的成员函数访问其中的私有成员,同时拒绝一般的访问请求,但是我们在实际使用中需要有一些操作经常访问这些私有元素,那么就需要在保护私有成员的同

2021-03-16 13:01:06 282

原创 C++入门基础(六) operator 运算符重载及日期类代码示例

  在之前的学习过程中,我们遇到了关于运算符重载的相关知识(出现于类的六个默认成员函数中赋值运算符重载,详细可参考上期博客C++入门基础(五) 类的六个默认成员函数详解),在那里我们知道了什么 叫运算符重载,为什么要重载?重载的功能是什么?但是其具体该如何运用呢?本篇博客中我们将通过一个日期类的示例具体进行学习。运算符重载运算符重载概念  在C++面向对象的语言中,允许在同一作用域中的某个运算符指定多个定义,我们称之为运算符重载,此时当我们再次调用重载运算符时,编译器通过该运算符使用场景中所携带的参

2021-03-15 18:53:59 461

原创 C++入门基础(五) 类的六个默认成员函数详解

在C++的类中一共有六个默认函数,分别是:构造函数、析构函数、拷贝构造函数、赋值运算符重载函数、取地址操作符重载、const修饰的取地址操作符重载。如果我们创建一个类,类里我们一个成员都不给,那么这里面什么都没有吗?实际上不是这样的,这个时候会自动生成以上所提到的六个默认成员函数,接下来我们将以一个日期类为例,对这六个默认函数依次进行介绍。class Date{public: Date();//构造函数 ~Date();//析构函数 Date(const Date& o

2021-03-15 00:29:20 374

原创 C++入门基础(四) 类 访问权限限定字符 this指针

  众所周知,C++是一门面向对象的语言,其关注的是对象,是将一件事情拆分成不同的对象,靠对象之间的交互完成的。就相当于,我们建一栋房子,有专门的打地基的,专门盖房子的,专门装潢的等等,而盖房子的东家只用和他们的负责人沟通就行,而至于这些负责人怎么把活干出来则是他们底下自己的事情,这样的形式便称作面向对象,如此将大大降低使用者的难度。这里我们将介绍C++中的一个特殊的结构——类。类...

2021-03-14 13:16:07 321

原创 C++入门基础(三) 内联函数、auto

内联函数

2021-03-11 13:22:38 285 1

原创 C++入门基础(二) 函数重载、引用

函数重载当我们需要调用某一种功能时,都需要调用其对应的某一个函数,但是如果要记住如此多的函数名这无疑是一件非常困难的事情,就比如咱们需要在电脑上通过程序画一幅图片一样,我们需要画圆、长方形、正方形、三角形、直线等等,但是如果我们将其以此定义函数一方面名称太多不好记忆,另一方面编写过于杂乱没有条理,因此,我们能不能就使用一个函数,但是依据某种方法,去画出不同的图形?在这里,介绍一种叫做函数重载的使用方法。函数重载是指函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参

2021-03-09 14:05:15 244 2

原创 C++入门基础 (一) 关键字、命名空间、输入/输出、缺省参数

1.关键字区别于C语言的关键词,c++在其基础上进行了增加扩展,共计63个关键字,而C语言只有32个,同时c++兼容C语言的关键字,具体如下:asmdoifreturntrycontinueautodoubleinlineshorttypedefforbooldynamic_castintsignedtypeidpublicbreakelselongsizeoftypenamethrowcaseenummutables

2021-03-08 23:13:02 254 1

原创 Linux下的常用工具(四)项目自动化构建工具 Makefile make

  在现实生活中我们进行某一项功能往往不能仅仅依赖于一个文件的代码进行操作,需要多个不同的版块进行组合实现,这个时候需要构建成一个项目,将所有的模块打包组合实现最终功能。MakefileMakefile是一个文本文件,记录一个项目的构建规则流程。在工作中会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力,同时一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚

2021-03-05 10:47:51 296 2

原创 Linux下的常用工具(三)调试器 gdb

在我们编写完程序之后,往往很难一次就实现我们所要实现的功能,特别是在进行一些大的程序的编写以及复杂的逻辑运算上,这时便需要一系列的调试过程,观察其运行状态发现出现问题的地方,这里我们主要使用gdb调试工具...

2021-03-04 22:37:28 221 1

原创 Linux下的常用工具(二)编译器 gcc

  现如今我们使用的无论是C语言、C++或者是Java等 编程语言都是高级语言,其出现的主要目的是为了方便编程人员进行程序的编写,而这些指令越来越趋近于人类日常使用的语言,我们的计算机是识别不出来的,就像是一个中国作家写了一本书,如果一般的外国人想要读的话,那就必须有人翻译出译本才行。计算机也是同样,而这时我们的编译器便充当了翻译的使者。即编译器是将上层高级语言代码就是成为对应平台的cpu指令,能够被cpu识别执行。编译的过程  在学习编译器工作之前,我们首先要知道正常的一个程序文件在编译时需要经历的各

2021-03-04 14:30:51 534 1

原创 Linux下的常用工具(一) yum vim

  Linux的基本功出来之前几张的基础指令外,还有一些常用工具,如软件包管理工具、编辑器、编译器、调试器、项目构建工具、项目管理工具等软件包管理工具  我们使用windows操作系统时,经常会下载一些有趣的应用于电脑上以方便自己使用或者娱乐。而在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序。但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好, 做成软件包(可以理解成windows上的安装程序)放在一个服务器上, 通过包管理器可以很方便的获取到这个编译

2021-03-03 22:13:03 302 1

原创 Linux下的基础指令(六) 权限相关 su sudo umask chmod chown chgrp

权限  Linux的最大特点是一个多用户的操作系统,允许多个用户同时操作。因此为了保护文件不被任意破坏修改,将每个用户进行权利的限制,使其可以允许且仅允许用户进行相对应权限的操作。Linux将其分为两种大的权限,分别是用户对系统的操作权限以及对文件的访问权限。对系统的操作权限Linux下有两种用户:超级用户(root)与普通用户* 超级用户:,也成管理员用户,可以在Linux系统下做任何事情,不受限制(在使用时,尽量慎重使用,操作不当对系统损害太大)* 普通用户:在Linux下做有限的事情超级

2021-03-03 15:04:58 425

原创 Linux下的基础指令(五) man ifconfig shoutdown reboot Ctrl+c tab

特殊指令man指令语法: man+需要查看的各项指令功能: 查看Linux下各项操作指令的功能及详细解释,按q退出例1man find 查看find指令的集体使用方法ifconfig指令**功能:**查看网卡信息shoutdown指令语法: shoutdown+常见选项功能: 按照特殊的要求关机常见选项* -h : 将系统的服务停掉后,立即关机。* -r : 在将系统的服务停掉之后就重新启动* -t sec : -t 后面加秒数,亦即过几秒后关机的意思例2sh

2021-03-03 11:42:46 289

原创 Linux下的基本指令(四)grep find

搜索与寻找相关内容或文件grep指令语法: grep+常用选项+搜寻的字符串+源文件功能: 在指定源文件中搜索字符串,将找到的打印出来。常用选项-a :将二进制文件以文本文件的方式搜寻数据-i :在搜寻时将忽略字母的大小写进行字符串的匹配-c :输出计算找到搜寻的字符串的次数-n :输出所要搜寻的字符串出现的行号-v :反向选择,即寻找未出现所搜寻字符串的那一行-b :在输出的每行前面同时打印出当前行在输入文件中的字节偏移量-P :将模式PATTERN作为一个Perl正则表达式来解释

2021-03-02 22:33:36 178

原创 Linux下的基本指令(三)zip unzip gzip gunzip bzip2 bunzip2 tar

打包压缩与解压缩指令  文件压缩的可以理解成按照指定的一张表,将相同数据以特殊数据进行替换,让内容减少,解压缩是将这些数据重新再替换回来。文件压缩存在多种算法,同时压缩比率也不同。在Linux中有三种压缩方式,分别是zip,gzip,bzip2zip指令语法: zip + 常用选项+打包生成的文件名+需要被打包的文件功能: 将目录或文件压缩成zip格式常用选项* -r 递 归处理,将指定目录下的所有文件和子目录一并处理例1zip passage.zip ./passwd ./virc

2021-03-02 17:59:38 359

原创 Linux下的基本指令(二)cp mv cd touch cat more less head tail

cp语法   cp+常用选项+源文件或目录+目标文件或目录功能   复制文件或目录到指定位置常用选项如下* -f 或 --force 强行复制文件或目录, 不论目的文件或目录是否已经存在* -i 或 --interactive 覆盖文件之前先询问用户* -r递归处理,将指定目录下的文件与子目录一并处理。若源文件或目录的形态,不属于目录或符号链接,则一律视为普通文件处理* -R 或 --recursive递归处理,将指定目录下的文件及子目录一并处理

2021-03-01 22:01:19 194

原创 Linux下的基本指令(一)ls pwd mkdir rmdir rm

  你是否曾经看过电影《黑客帝国》?你是否也曾想着像电影里的那些大佬们一般,仅凭一双手便能改变整个世界。对于程序员来说当然可以,并且就是那么神奇。其中有一个小细节,当作者看到时,便有一个非常强烈的念头:什么时候我能像他们一样不需要鼠标,仅仅只靠一块键盘便可以实现所有的功能。偷偷告诉你,不要急,在 Linux里面就可以,前提是,必须熟练掌握Linux下的基础指令和各个快捷键的功能使用。ls指令语法: ls+功能选项+目录或文件功能:  [1]若后面跟的是目录,则列出该目录下的所有子目录与文件  [2

2021-02-28 18:27:36 292 1

原创 Linux 虚拟机登录方法

Linux的相关背景   Linux的简介以及相关背景,相比这里不用再过多的赘述,以下摘自百度百科的相关介绍片段:   Linux,全称GNU/Linux,是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX的多用户、多任务、支持多线程和多CPU的操作系统。伴随着互联网的发展,Linux得到了来自全世界软件爱好者、组织、公司的支持。它除了在服务器方面保持着强劲的发展势头以外,在个人电脑、嵌入式系统上都有着长足的进步。使用者不仅可以直观地获取该操作系统的实现机制,而且可以根据自身的需要来修改

2021-02-28 14:15:37 4990

原创 CSDN首行缩进

一般使用以下三种表示方法: 全角的空格 半角的空格 半角的不断行的空白格注意,其后分号为英制,若想产生较为多的空格,多复制几次即可。

2021-01-29 10:40:52 142

原创 Linux 文件所在路径

Linux 文件所在路径表示方法Linux的文件存储结构区别与Windows系统,其是从根目录开始的一个树的结构,目录结构唯一。所以,在 表示文件的路径问题上则可参考树的子节点的路径表示方法 。在Linux中存在绝对路径和相对路径两种表示方法。绝对路径绝对路径就是从根目录开始,依次一层一层找到该文件所在位置,其中经过的节点则为其路径。相对路径相对路径则是以当前所在目录为起始的路径,对于一个文件的路径表示方式会随着当前所在目录的不同而不同。其中有两个特殊的表示方式“.”和“…”,每个目录中都有两个子

2021-01-29 10:17:14 752

原创 括号匹配 C语言实现

括号匹配     给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效【有效字符串需满足】     1.左括号必须用相同类型的右括号闭合。     2.左括号必须以正确的顺序闭合。     3.注意空字符串可被认为是有效字符串。【题目分析】:    我们知道任何一种括号都是两两成对出现的,因此,再出现左括号是,必有有一个相匹配的右括号出现,但如果仅仅满足这个条件则不能正常的进行匹配,因为仅仅让出现数量相同是远远不够的,还需要让他们按照正确的顺序进行结合才

2020-12-25 23:42:43 950

原创 消失的数字(要求时间复杂度O(N))

消失的数字题目要求:数组nums包含从0到n的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗?题目解析:在解这一题时,网上有许多不同的解法,例如使用哈希表等等,但是对于该题来说,在不要求空间复杂度的情况下,我们直接使用映射的方法,相对于原数组,我们建立一个理论上包括所有从0~N的数组,并且将其初始化为(N+1),或者其他的在0-N之外的数字(便于区分),之后对原数组进行遍历,将原数组元素的值对应至所创建数组的下标,将其值置0,之后再次对该数组进行遍历,不为0的

2020-12-06 20:27:58 233

原创 文件 操作 C语言

文件对一个程序,我们最终要实现的功能都离不开文件,它的作用是将用户使用的以及所操作的一系列数据进行保存与读取。一般的程序我们都是仅仅将其用作实现某一功能,退出之后便是过往,再也找不到之前使用的痕迹以及数据。试想如果没有一种机制可以将一些重要的数据保存起来,该是多么可怕的事情。那么该如何去读写文件呢?在C语言的库中给出了一系列对文件操作函数,方便了我们的操作。首先我们要清楚文件的基本概念:1.文件的组成文件名包含3部分:文件路径+文件名主干+文件后缀例如: c:\TEXT\test.txt为了方

2020-12-03 12:17:41 106

原创 malloc与free 动态开辟空间与释放

malloc

2020-12-03 10:07:17 632

原创 字节 对齐 方法

引言:字节对齐,由空间换取时间的产物之一。是指在变量进行访问时,会在不同类型的变量之间放置一段间隔空间,以此对数据进行所谓的“对齐”操作,从而达到提升程序访问数据的速度、节省时间的目的。主要用在结构体中,因此,大部分结构体会因变量申明的顺序不同或者是平台不同将产生不同的空间大小,如此如何正确计算出一个结构体空间的大小便成为了一件令人头疼的事情,以下我们将详细介绍以下不同的情况下,对字节对齐的理解及空间大小的计算。背景:现代计算机中内存空间都是按照BYTE划分的,从理论上讲似乎对任何类型的变量的访问可以

2020-11-28 10:51:06 1704

原创 C语言 大小端 存储

大小端  刚开始听到这个词,是不是一头雾水?难道数据在计算机中的存储顺序还不一样?大小端是什么鬼?首先,要先知道一个常识,大小端只是不同的硬件中存储的方式不一样,没有对错之分,但各有优缺点。那么说了那么多,什么是大小端呢?大端  大端存储模式,是指数据的地位内存保存在内存的高地址中,而数据的高位,保存在内存的低地址中。  例如一个整数1234,在内存中是怎么储存的呢?以32位为例,首先将其转化成二进制  十进制:1234  二进制:100 1101 0010  而在我们内存中是有着32个bi

2020-11-26 21:16:05 709

原创 str-函数详解及模拟实现(strlen、strcpy、strcat、strcmp)

目录字符串内置函数函数的功能及模拟strlenstrlen函数介绍strlen函数模拟strcpystrcpy函数介绍strcpy函数模拟strcatstrcat函数介绍strcat函数模拟strcmpstrcmp功能strcmp函数模拟字符串内置函数       C语言中除了之前讲过的基本数据类型之外,还有两个常用的结构:数组与字符串。事实上C语言本身是没有字符串类型的,字符串通常放在常用字符串中或字符数组中。字符串常量适用于那些不

2020-11-25 12:51:05 1382

原创 三子棋小游戏 详解easy

三子棋小游戏程序实现分析三子棋题目分析具体步骤及代码如下:主函数矩阵初始化函数页面显示函数玩家位置输入函数位置合法性判断函数玩家落子电脑落子主程序是否继续执行判断程序结束输出函数完整代码三子棋题目分析      三子棋,是黑白棋的一种。三子棋是一种民间传统游戏,又叫九宫棋、圈圈叉叉、一条龙、井字棋等。将正方形对角线连起来,相对两边依次摆上三个双方棋子,只要将自己的三个棋子走成一条线,对方就算输了。但是,有很多时候会出现和棋的情况。(——采自百

2020-11-21 01:06:44 1706

原创 C语言变量定义与类型【局部变量、全局变量、形式参数】

C语言之变量详解变量的定义对于一般变量的解释,我们从字面意思上可以理解为允许对其值进行改变操作的量,是对某一对象值进行便于理解使用的名称。这么说可能有点不太明白,就比如说我们的身份证,在某种程度上就是一种变量,每一个身份证号(变量)都代表了一个确切的人(值),人可以有不同的发展,外界可以对其有不同的影响,但是一旦我们提到这个身份证号,那么便是唯一的指向这个本体。而在我们的C语言中,我们常将变量理解为内存中的一个命名的位置,存放一个可以被修改的值变量在使用之前一定要先进行声明(告诉大家有这个东西存在,且

2020-11-13 21:40:33 2852

原创 进击的C语言

写给自己的序千里之行始于足下,C语言的世界是辽阔的,是神秘的。要想真正的进入C语言的世界,做到在这个充满逻辑的世界里打造出属于自己的一座庄园,光靠课堂是没有用的,光靠看书也是没有用的,最重要的一点是要靠自己的双手与大脑,只有不断地练习尝试,才有可能等到开花结果的那一天。少年,大鹏扶摇九万里,亦是从毫厘间展翅。只要我们在学习的过程中不放弃,敢钻研、多尝试,一定会拥有属于自己的舞台。目标即方向大家为什么要学习C语言?或者说学C语言的目的是什么?我想很少会有人说是为了兴趣吧,当然有,但是却是极少的。大多数学

2020-10-28 23:13:21 113

原创 关于大整数的加减法

大整数我们在学习C语言时会遇到这样一个问题:当整型数据类型无法存储时,会自然想到长整型数据类型,其数据范围为-2147483647 到 2147483647。而当数据在大一点呢?我们称这样的整数叫做大整数,以此便产生了一系列的关于大整数的算法。大整数的加减在阅读了网上那么多的关于大整数的计算后,发现方法不尽相同,但大多都只限于特殊的算法,比如仅适用正整数相加减,但我们知道大整数的加减除上述之...

2019-10-05 22:03:36 1057 1

空空如也

空空如也

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

TA关注的人

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