自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(42)
  • 资源 (4)
  • 收藏
  • 关注

原创 c++智能指针简单实现

从上到下依次是auto_ptr unique_ptr 以及shared_ptr实现以及简单的调用。用作记录//auto_ptr.h#ifndef _AUTOPTR_#define _ATUTOPTR#include <iostream>#include <string>template<typename T>class Smart_auto{public: explicit Smart_auto(T* _data = nullptr) :dat

2022-04-26 20:42:31 1355

原创 c++ 智能指针shared_ptr简单介绍

shared_ptr 智能指针允许多个对象共享资源指向一个资源,指针里面含有引用计数,当引用计数为0时自动调用析构函数释放内存空间,因此可以自动释放动态内存空间。下面时一些简单的使用和介绍#include<iostream>#include<memory>#include<vector>using namespace std;struct data{ string name; int age; };int main(){ int a = 4

2022-04-13 15:14:50 919

原创 C并查集的两个重要函数union和find的实现C++

今天看了并查集的实现,重点是两个函数find 以及union 现记录如下。视频参考讲解#include <iostream>#include<vector>using namespace std;//中间包括了find与union的快和慢的版本class UnionFind{public: //find 快 union慢 int size; vector<int> data; UnionFind(int _size = 5) :size(_siz

2022-03-09 14:56:23 824

原创 c++多线程学习笔记二——线程池的实现

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、共享数据二、使用步骤1.引入库2.读入数据总结前言一、共享数据一个进程可以包含多个线程,线程之间是共享数据,对于共享数据,同时读取出现的问题不大,但是当线程同时更改共享数据时可能会出现崩溃的情况。因此我们需要在共享数据上加入互斥量二、使用步骤1.引入库代码如下(示例):import numpy as npimport pandas as pdimport matplotlib.pyplot as plt

2022-02-16 15:11:09 617

原创 c++多线程学习笔记一——多线程相关概念及简单的示例函数

进程:可以简单理解成一个可执行程序线程:一个进程可以包含多个线程,一定有一个主线程。进程与线程之间的区别与联系:1)进程是最小的资源分配单位,线程是最小的程序执行单位,每新建立一个进程,系统需要为其分配相应的地址空间,而线程共享数据段,是同一个地址空间,CPU切换一个线程要比切换一个进程花费小很多。2)进程之间的通信不是很方便,比如经历SOCKET之类的网络编程技术,而线程之间因为是共享数据段所以线程之间的通信很方便很多。3)多进程程序具有健壮性,具有一定的稳定性,多线程程序只要有一个程序崩溃

2022-02-13 10:49:03 631

原创 C++实现快速排序 希尔排序 插入排序 冒泡排序 选择排序 归并排序

直接上代码,有问题私聊#include<iostream>#include <vector>#include<time.h>using namespace std;//输出排序好函数的值void printvalue(vector<int>nums,int size){ for (int value=0;value<size;value++) cout << nums[value] << endl;}//工

2021-09-13 21:55:47 240 2

原创 数据结构二——栈与队列的简单介绍

栈与队列都是一种线性表存储结构 各有各的数据特点,其中 栈的特点是先进后出,我们通常把允许插入和删除元素的一端称为栈顶,将另一端称为栈尾。栈的结构特点决定栈可以做很多事情。比如我们在日常生活中浏览器通常具有前一步后一步的步骤,这种结构就是用栈实现的队列也是一种数据结构 它的特点是允许在一端插入元素,在另一端删除元素在允许插入元素的一端称为队尾,在另一端删除元素称为队头。下面简单用代码增强相关知识点的记忆。# include <iostream># include <sta

2021-07-08 11:20:37 154

原创 数据结构一——顺序结构以及单链表的创建,添加,以及删除

学习创建单链表时,网上教程感觉大多没有释放内存,我认为这是一个bug,以下是根据自己的想法写的链表创建以及添加删除结点。//第一章节主要了解了顺序存储结构//所谓的顺序存储结构存储数据的内存空间是连续的,由于是连续的存储空间//所以在存储和读取比较方便,时间复杂度是o(1),但是在添加和删除元素会比较//麻烦,以添加为例,如果恰好添加的元素在最后一位,那么其他元素则不需要移动//如果添加的元素在第一位,那么则需要移动n-1次。所以对于顺序存储结构来说,//增加和删除元素时间复杂度是o(n)。顺序

2021-07-03 17:48:49 164

原创 VS2019+FFmpeg C++实现 FFmpeg将YUV视频编码为H264

最近在做视频编解码相关知识,我主要的参考文章是雷神的编码教程,里面讲的很详细具体博客参考雷神参考相关结构体内容解读解读雷神代码详细第三个链接是我认为解读比较详细的文章,另外,因为我本人这次要求的传输数据是mat类型,所以还涉及到mat 类型与AVFrame的互相转换。网上大多版本不可用,以下是可以使用的版本。cv::Mat avframeToCvmat(const AVFrame* frame){ int width = frame->width; int height = frame

2021-06-09 11:36:09 1193 2

原创 c语言多线程相关基础知识

最近在学习C语言多线程的相关基础知识,特此记录。课程连接多线程呢个课程多线程创建相关函数pthread_t id //创建线程????id 。pthread_create(&id,null,func,arg4);//创建一个多线程,//第一个参数是ID,//第二个参数是线程的属性,通常使用默认值 //第三个参数是线程函数//第四个参数是将传入线程函数的参数,(如果想要传入多个参数,可以传入一个类)pthread_exit()//线程退出函数,可以返回数据通常与 pthread_

2021-05-26 17:47:14 287

原创 利用sift特征点判断相机是否发生移动。

具体解决的场景是 当你的相机在标定后如果不小心被触碰后,摄像机前后拍摄的图像来检测相机是否发生移动,从而准确定位到是哪个相机方便后续进行调整。具体的程序也很简单,具体思路为利用sift寻找两张图像的匹配特征点——去除误匹配点——利用匹配点的欧式距离由小到大排序——以10.5为阈值点>10.5则认为有轻微移动(10.5是自己粗略估计值)具体程序如下#include <iostream>#include<algorithm>#include <opencv2/ope

2021-05-25 17:43:15 914

原创 c++学习笔记二十二——捕获处理异常

c++中有一些的异常处理是不可避免的,c++中 throw try catch 是三个专门处理异常的函数。我将用自己的语言简单的介绍如何使用这三个函数。throw //抛出异常,后面可以很整型 浮点型等等 该函数的抛出的异常可被catch捕捉到try{......}』 //里面执行你认为可能出现异常的语句,当出现异常以后,抛出异常catch(int a){} //捕获异常,当执行前面语句抛出的类型与()内类型一致则执行{}内语句以上要注意的是1)如果 try 语句内无异常则不执行catch

2021-05-04 17:55:41 226

原创 C++学习笔记二十一——函数模板与类模板

针对函数模板与类模板我想摒弃课本固有的理论知识定义,用我自己的话来见简单的叙述作用以及概念。函数模板有什么用?C++有很多基本的数据类型,比如 int ,double ,float…等等。我们在定义一个函数时会定义一个返回类型,表示函数返回值,但是这种返回值有一个坏处,就是只能返回单一的数据类型。如果两个参数基本类型不一致,但是想执行的函数体是一致这样我们就需要写两个函数,比如对于float 和int 基本类型来说,我们进行取绝对值的操作我们就需要写两个形参不同的函数int abs (int x){

2021-03-15 21:59:04 116

原创 c++学习笔记二十——派生类的构造函数,复制构造函数和析构函数

在讲派生类的构造和析构函数时候我们先介绍类的兼容性。类的兼容性:类的兼容性是指在需要基类对象的任何地方都可以使用派生类来替代,通过继承,派生类得到了除了基类构造函数,复制函数中的所有成员。这样公有派生类实际具备了基类所有的功能,凡是基类所能解决的问题,公有派生类都可以解决。类的兼容性规则中所指代的情况有以下几种1)派生类的对象可以隐含转化为基类对象2)派生类对象可以初始化基类的应用3)派生类的指针可以初始化基类的指针在替代之后,派生类对象可以作为基类对象使用,但只能使用从基类继承的成员。派生类

2021-03-11 17:45:52 3201

原创 c++学习笔记十九——类的继承与派生

什么是类的派生与继承?面对对象的程序设计中提供了类的继承机制,允许程序员在保持原有类特性的基础上,进行更具体,更详细的类的定义。已原有类为基础产生新的类,我们就说新的类继承了原有类的特征,也可以说从原有类派生出新类。派生类的定义格式class 派生类名:继承方式 基类名1 ,继承方式 基类名2,继承方式 基类名3....{派生类成员声明;}基类名:已有类的名称派生类名:是是继承原有特性新的类名,一个派生类可以继承多个基类,这种情况称为多继承,一个派生类只有一个继承的基类称为单继承。继承方

2021-03-08 11:42:01 300

原创 c++学习笔记十八——指针与引用

指针与引用指针以及引用有很多相似的地方,使用他们作为形参,都可以修改主调函数变量从而达到值的双向传递。都可以避免复制值的发生从而减少调用数据的开销。引用之前在介绍引用时将其介绍为其他变量的别名,但是对一个确定的引用来说,他可能在不同时刻表示不同变量的别名,因此,要在内存中为引用分贝空间来标识它所引用的变量,在程序运行时,变量只能依靠地址来区别,因此,只有通过储存被引用变量的地址,在运行时才能准确定位被引用的变量。在运行时引用所占的内存空间中。引用本身所占的内存空间中,储存的就是被引用变量的地址,这与指

2021-03-08 08:38:02 112

原创 c++学习笔记十七——字符串

字符串是由一对双引号引起来的字符。如“abcd”,“hanruidashuaibi”,等等著如此类都是字符串常量,他们按照字符串中顺序按顺序储存,每个字符占用一个字节,并在结尾添加“\0”作为标记。一个字符串常量表示一个数组的首地址,因此可以用一个字符指针指向字符串。...

2021-03-05 09:33:21 128 1

原创 c++学习笔记十六——指针及深复制浅复制

什么是指针?我们前面学习过一些基本的数据类型,如int,float,char…等等,其中int变量 存放整型数据,float类型变量存放浮点型数据,char存放字符型数据。而指针类型变量存放地址类型数据。如何理解“地址”?计算机的存储器被划分为一各个储存单元,储存单元按照一定的规则编号,这个编号就是储存单元的地址。地址编码的基本单元是字节,一个字节由八位二进制数组成,也就是说每一个字节是一个基本的内存单元,有一个地址。储存结构简图指针变量声明指针变量用来存放内存单元地址,通过变量名访问变量属于

2021-03-03 08:43:20 7654

原创 C++学习笔记十五——数组

什么是数组?数组是同一类型的集合体,用来储存和处理大量同类型的数据结构。如何使用数组?在使用数组之前,我们首先要进行类型的声明应该首先确定以下问题:1:数组的名字2:数组的类型3:数组的的大小数组的声明格式为数据类型 标识符 [常量表达式1][常量表达式2]数组中的数据类型包括 整数型 浮点型等甚至可以为字定义数据类型,比如类。而常量表达式为数组的界,这里需要注意的是,数组是从下标0开始,到N-1截止,例如 int a[10],包括的范围就是a[0]~a[9]一共10个元素,a[2]

2021-03-01 08:27:39 388 2

原创 c++学习笔记十四——常对象,编译的杂谈笔记

常对像是这样的对象,定义必须进行初始化,且在生存期内无法进行更新。形式 const 类型名 对象名我们知道一个大型的工程可能有包含多个头文件,举例子如下//main.cpp# include <test1.h># include <test2.h>................//test1.h# include <rui.h>..........//test2.h# include <rui.h>...........//ru

2021-02-26 17:15:07 67

原创 破解版全能地图下载瓦片数据以及操作使用方法

最近在cesium中引用离线地图数据的时候,突然发现谷歌地球挂掉,没办法只能使用离线地图的下载方式,网上搜索的时候是有离线地图下载器——全能地图下载,下面进行破解以及下载瓦片的使用办法,具体的安装过程参考以下教程,亲测可用全能地图下载器安装教程里面也有下载包,如果里面百度网盘地址挂掉联系我,我这里有备用安装包,接下来进行下载过程的指导,首先选取你所下载地图的地图源1.运行软件后点击地图源可以看见选择的地图源,通常情况下,如果你在线引用谷歌地图失败的话,那么通常你离线地图下载也会出问题,但是我发现你只

2021-01-22 11:02:23 3628

原创 一篇文章解决Linux下安装tensorflow

最近希望在linux环境下使用anaconda安装tensorflow,在此做一个记录。本文默认安装环境系统:linuxcuda: 10.1(查看自己的cuda 版本 命令: nvcc -V)anaconda:pip以上都是已经默认安装好具体请查询相关教程。首先要安装一个虚拟环境,那么什么是虚拟环境呢,在我的理解,虚拟环境就是你新建的环境在这个环境中配置的东西不受外界的干扰也无法影响外界,这是我自己的理解,那么以我为例,使用anaconda 新建一个虚拟的环境命令为conda create

2021-01-20 20:16:16 472

原创 c++学习笔记十三——数据作用域以及生存期

数据作用域就是一个数据有效的区域数据作用域数据有效的区域,数据作用域包括以下几种函数作用域:说简单一些就是函数的形参,函数在声明中 作用域只限于括号范围内,如有以下代码void show(int x);其中在声明中x的作用域仅限于括号内,由于编译器只检查参数类型,而不检查参数的名称,所以可以在声明中不定义名称,但是为了读起来方便理解最好还是定义名字。局部作用域:函数形参列表中的定义域,从函数形参开始一直到函数体结束,函数体内声明的变量,其作用域从声明开始,一直到声明所在块结束的大括号为止,其

2021-01-19 16:35:31 419

原创 c++学习笔记十二——结构体 联合体 枚举类

结构体其实是一种特殊的类。是c++继承c语言得来的,但是与类不同有以下两点1.关键字为 struct,类的关键字为class.2.其默认属性为public,类的默认属性为private其他与c++中类的使用方法相同下面举一个例子说明结构体的使用#include <iostream>using namespace std;struct test {private: int i; int j;public: test(int i1, int j1) :i(i1), j(j1)

2021-01-15 17:57:27 226

原创 C++学习笔记十一———组合类及前向引用声明的使用

对于类,前面的文章分别简单讲述了什么是类?以及类的构造函数,类的复制构造函数的作用。下面将要结婚扫

2021-01-14 09:59:09 403

原创 C++学习笔记十——类的复制构造函数与析构函数

上一个章节介绍了类的构造函数,我们可以知道构造函数的作用是将类的成员初始化,那么复制构造函数是用来干嘛的呢?复制构造函数也可以简单的理解为进行初始化的函数,主要应用在以下三种场合中1.在已经有一个初始化的类,想要用这个类初始化另一个类,简单理解为给新的类进行赋值。2.函数调用时,若函数的形参为类型为类的对象,在进行实参形参的相互转换的时候,会调用复制构造函数。3.类的对象作为返回值时,返回时会调用复制构造函数。复制构造函数的基本形式类名 (const 类名 &p);//复制构造函数的形式

2021-01-13 22:23:39 355

原创 C++学习笔记九——类的定义与初始化

C++中,可以使用类来定义自己的数据类型,那么如和理解自己的数据类型?比如我们常见的如 int ,float,char…等等诸如此类,这都是一种数据类型,那么比如我自己想定义一个叫 clock 的数据类型,里面包含小时,分钟,秒,并可以显示出来,那么我们就可以使用类来定义自己的数据类型 clock。定义如下class clock {public: void setime(int hour, int minute, int second); void showtime(); clock(int n

2021-01-12 11:53:32 1478

原创 使用ffmpeg使用简单的指令,实现nginx本地服务器上推流。

近期研究代码实现推拉流。先使用简单命令实现功能熟悉流程,特将所用资源及学习过程记录如下。一 环境准备1)ffmpeg 下载与安装自己搜索官网下载,并按照教程配置环境变量即可。这是我下载的版本。配置成功后 win+r 进入命令窗后输入以下命令出现下图则配置成功2)nginx 搭建本地服务器下载 nginx,解压后,搭建rtmp流服务器,网上教程繁复,最后走了无数坑我总结出以下重要的几点:1——下载什么版本都可以,首先进入文件夹下 conf 文件夹 打开 nginx.conf文件,可以用记事本

2020-10-30 21:58:01 743

原创 C++学习笔记八——顺序容器vector list deque

一 什么是顺序容器?顺序容器内的元素按照其位置储存和访问。除顺序容器外,标准库还定义了几种关联容器,其元素按键(key)排序。例如 标准库vector 类型,这就是一种顺序容器,它将单一的类型元素聚集起来成为容器,然后根据位置来存储和访问这些元素,这就是顺序容器。标准库定义了三种顺序容器的类型: vector list 和 deque。以下为几种顺序容器类型vector // 支持快速随机访问list //支持快速删除插入deque //双端队列1.1 顺序容器定义在使用各种容器,必须先包

2020-09-26 22:26:38 402 1

原创 C++学习笔记七——使用ofstream ifstream进行简单得读写txt文件

C++的输入输出由标准库提供,标准库定义了一族类型,支持对文件和控制窗口的等设备的读写(IO)。还定义了其他一些类型,使得string 对象能够像文件一样操作,从而使我们无需IO就能实现字符之间的转换。istream //输入流类型,提供输入操作ostream //输出流类型,提供输出操作>> //用于从istream对象中读入输入<< //用于把输出写到ostreamIO类型在三个独立头文件定义:iostream 定义读写控制窗口类型fstream 定义读写

2020-09-26 15:24:13 4406

原创 C++学习笔记六——指向函数的指针以及构造函数

首先要说明的类成员之一——构造函数,构造函数的作用是初始化类成员。,构造函数时特殊的成员函数,与其他的成员函数不同,构造函数和类同名,而且没有返回类型,与其他成员函数相同的是,构造函数也有形参表(可能为空)和函数体。一个类可以有多个构造函数,每个构造函数必须由于其他构造函数不同数目或类型的形参。下面举一个例子说明://首先定义一个类struct hanrui{public://可以不写,因为struct默认为publicint test;//定义一个teststring name;};我

2020-09-24 12:01:28 1222

原创 自增自减操作符简单说明

总是忘记++i,以及i++的使用方式,下面以一个简单的小程序说明 int i=0,j=0; j=++i; //j=1,i=1 j=i++; //j=1,i=2二者区别在于自增自减符号的前置和后置,”++“前置说明在未使用i的值之前加1,”++“后置说明在i值使用之后进行自增自减。只有在必要时才会采用后置...

2020-09-21 17:23:09 133

原创 c++学习笔记五——标准库类型vector与string

C++中除了像int ,float等一些基本类型外,C++还定义了内容丰富的的抽象数据类型标准库。其中最重要的标准库类型是string和vector,他们分别定义了大小可变的字符串和集合。1标准库string类型1.1 string 对象的定义以及初始化//构造函数是一个特殊的成员函数,定义如何初始化该类型的对象string s1 // 默认构造函数,s1为空串string s2(s1) //将s2初始化s1的副本string s3("value") //将s3初始化一个字符串字面值的副本st

2020-09-21 09:22:06 497

原创 C++ 学习笔记四——基类和派生类的讲解与实例应用

在认识C++基本语句结构的基础上,了解类成员,并使用类成员编写一个简单的程序。主要用到以下知识点;1.类成员使用及派生类的使用2.头文件的使用。我们通过类来定义自己的数据结构,类定义以关键字class或struct开始(class和struct关键字的差别在于默认访问级别,默认情况下,struct的成员为public,class成员private),其后是该类的名字标识符。类体位于花括号里面,花括号后面必须要跟一个分号。类体可以为空,类体定义组成了该类型的数据和操作,这些操作和数据是类的一部分,也称

2020-09-20 19:13:49 1852

原创 vcpkg 安装ceres库总崩溃的解决办法

最近笔者在安装用vcpkg 安装ceres库,输入.\vcpkg.exe install ceres:x64-windows系统在下载完一个叫ceres_solver包之后,在进行下一步时,电脑总是卡死,只要运行到这步就卡死,一开始还以为是笔者下载的包有问题所以反复安装卸载,反复开机,知道我仔细查阅资料才发现,vcpkg下载Ceres库时默认不安装两个依赖文件,所以在安装的时候安装上就好。具体的命令行如下.\vcpkg install ceres[suitesparse,cxsparse]:x64-

2020-08-29 21:56:53 1802 6

原创 VCPKG在安装库时 “ File does not have expected hash:”

vcpkg在安装库时可能会遇到哈希值的问题,这种问题通常是由于你自己手动去下载他的包,和vcpkg本身的包版本不对。会报以下的错首先把 Exepted hash 里面的 e16327那一串数字复制下来。接着打开vcpkg文件夹内下路径的portfile.cmake文件接着将刚才复制的数字复制到响应位置上如此问题即可解决希望以上问题可以帮到你,这个问题可是困扰了我好久...

2020-08-29 17:44:48 2072 3

原创 vcpkg安装库速度很慢的解决的办法。(手动下载还是很慢的解决办法)

vcpkg常被我们用来安装C++的某些库文件。比如我如果想安装 ceres库,那么就进到vcpkg.exe的文件夹下输入指令.\vcpkg.exe install ceres:x64-windows接下来就需要耐心的等待安装完成,但是在安装过程中速度会很慢,那么解决的办法为:查看需要下载的网址——复制网址到浏览器进行下载——将文件放到downloads文件夹下——将名字改为下载的名字(具体去temp文件夹下看名字)。以下具体操作图片首先观察要下载的网址接下来要复制到浏览器进行下载将其复制到d

2020-08-28 11:28:56 5279

原创 C++ 学习笔记三—— 部分泛型函数的用法

今天简单的学习了几个泛型算法的函数,特地在此做一个记录。按照返回值的类型分为以下几类返回值为 int 型 :accumulate() :将容器内的元素值相加,再加上第三个参数指定的初值.adjacent_difference() : 将容器内的第一个元素保持不变,第二个元素减去第一个元素(默认操作),也可以通过添加特殊命令执行其他运算:乘法,加法。 函数前两个参数传入容器的起始位置,第三个参数是容器的开始(a.begin()),将计算好的值传入到第三个容器内。3)adjacent_find(),

2020-07-08 18:42:09 160

原创 Win10环境下的Openmvs +Openmvg+VS2017 配置安装

最近学习用到该软件。特将安装过程记录再此。因为通常Openmvs与 Openmvg 在linux上使用,在windows 上有很多安装问题。废话不多说下面开始安装。首先安装 Openmvg,Openmvg官方安装教程如下:GitHub地址文件中在 Windows 中的教程如下图所示在这里注意第一步 git clone ,这一步可能进行成龟速,为了解决龟速的问题,大家可以采用码云的办法。(码云具体是什么以及具体的操作流程,请大家自行百度,这样能省很长时间)。按照图中所示进行操作,注意要提前下载cmak

2020-06-22 22:42:08 4024

原创 C++学习笔记二——利用基本知识点编写小程序

今天买的ESSential C++ 这本书到了,粗略学习了第一章,主要回顾了几个重要的知识点,下面将介绍今天学习的内容。自己编写了一个小程序,里面包含了C++一些知识点的基本使用,可以当做一个小例子练手。该程序主要实现以下功能:1)创建了斐波那契数列等一系列其他数列,显示其中的两个数,用户填写第三个数。2)判断用户的数据是否正确,并询问用户是否愿意继续填写数据。3)将用户的成绩按照名字存放在TXT文件中,如果想要查询成绩则输入名字进行查询。以下是代码:# include <iostrea

2020-06-12 19:08:35 172

雷神编解码代码资源 已经配置好相关库

vs2019+ffmpeg

2021-06-09

全能地图下载器用户手册.pdf

全能地图下载器说明书 里面包含全能地图下载器的各种使用方法,以及如何操作下载离线地图的流程

2021-01-22

ffmpeg-git-full.7z

ffmpeg 官网下载,里面bin文件夹有 ffmpeg.exe ffplay.exe ffprobe.exe

2020-10-30

strawberry-perl-5.30.0.1-32bit.zip

去草莓官网下载很久甚至只有几kb/s,有时候还会卡死。我尝试用迅雷下载效果也很一般,这个文件是我千辛万苦下载下来,希望对你有帮助。

2020-08-29

空空如也

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

TA关注的人

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