自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【C++修行之道】string类练习题

给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和并同样以字符串形式返回。如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。给你一个字符串 s,如果它是 回文串 ,返回 true;在移除非字母数字字符之后,s 是一个空字符串 ""。输入:s = "a-bC-dEf-ghIj"输出:"j-Ih-gfE-dCba"

2024-07-10 21:23:03 1862 7

原创 【C++修行之道】string类的使用

C语言中,字符串是以'\0'结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数, 但是这些库函数与字符串是分离开的,不太符合OOP的思想,而且底层空间需要用户自己管理,稍不留神可 能还会越界访问。1. 字符串是表示字符序列的类2. 标准的字符串类提供了对此类对象的支持,其接口类似于标准字符容器的接口,但添加了专门用于操作单字节字符字符串的设计特性。3. string类是使用char(即作为它的字符类型,使用它的默认char_traits和分配器类型(关于模板的更多信息,请参阅basi

2024-07-09 00:03:42 1480 4

原创 完全离线的本地问答模型LocalGPT如何实现无公网IP远程连接提问

本文主要介绍如何本地部署LocalGPT并实现远程访问,由于localGPT只能通过本地局域网IP地址+端口号的形式访问,实现远程访问还需搭配cpolar内网穿透。LocalGPT这个项目最大的亮点在于:1.使用LLM的力量,无需互联网连接,就可以向你的文档提问。100%私密,任何数据都不会离开你的执行环境。你可以摄取文档并提问,无需互联网连接!2.使用LangChain和Vicuna-7B以及InstructorEmbeddings构建。可以借助LangChain构建更高级能力的pipeline。

2024-06-29 11:07:20 1763 49

原创 【C++修行之道】C/C++内存管理

我们可以看出new/delete 和 malloc/free最大区别是 new/delete对于自定义类型除了开辟空间还会调用构造函数和析构函数class Apublic::_a(a):_a(aa._a)if (this!//// 自定义类型, new才能嗲用构造初始化, malloc不再适用//// 私有的,无法初始化//free(p1);// 开空间/是否空间, 还会调用构造和析构。

2024-06-18 17:18:17 3709 95

原创 Windows系统搭建Tomcat Java Web服务器与环境变量配置详细教程

本文主要介绍如何在Windows系统安装Tomcat服务并结合cpolar内网穿透工具,将本地服务发布到公共互联网上进行远程访问。Tomcat作为一个轻量级的服务器,拥有强大功能,由于其可以实现JavaWeb程序的装载,就成为配置JSP和Java系统必备的环境软件,也是开发调试JSP程序的首选。Tomcat运行稳定且开源免费,加上apache和Sun的加持即免费和开源的特性,使其广泛应用在中小型系统及并发访问用户较少的场景中。

2024-06-17 20:55:57 1054 41

原创 【C++修行之道】类和对象(六)再谈构造函数(初始化列表)| explicit关键字 | static成员 | 友元|匿名对象|拷贝时一些编译器优化

函数传参时尽量使用const &传参接收返回对象,尽量以拷贝构造方式接收,不要赋值接收函数中返回对象时,尽量返回匿名对象。

2024-06-10 10:58:25 2380 76

原创 【C++修行之道】类和对象(五)日期类的实现、const成员、取地址及const和取地址操作符重载

改变参数顺序后,编译器不会再将其识别为流插入运算符,导致无法正常使用链式调用等特性。的参数顺序反过来会导致函数不能正常作为流插入运算符使用,破坏标准库的调用方式和使用习惯。的正确性和对象的常量性质,可能导致未定义行为或程序错误。,const修饰类成员函数,实际修饰该成员函数隐含的this指针,表明在该成员函数中。这里不需要写形参名,因为接收值是多少不重要,也不需要调用。成员函数承诺不会修改对象的状态,而如果它调用了非。因此,从逻辑上讲,在可以修改对象状态的非。成员函数,那就是如果你将对象的。

2024-06-06 16:30:08 1774 91

原创 【C++修行之道】类和对象(四)运算符重载

运算符在这里的作用是明确告诉编译器:“我要的是这个成员函数的地址,而不是执行这个函数”。但是,由于ref是对这个临时对象的引用,所以这个临时对象的生命周期会被延长,直到ref的生命周期结束。此时用户再在类外自己实现一个全局的赋值运算符重载,就和编译器在类中生成的默认赋值运算符重载冲突了,故赋值运算符重载只能是类的成员函数。注意:内置类型成员变量是直接赋值的,而自定义类型成员变量需要调用对应类的赋值运算符重载完成赋值。,也具有其返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通的函数类似。

2024-06-04 23:05:02 2081 35

原创 【C++修行之道】类和对象(三)拷贝构造函数

默认的拷贝构造函数对象按内存存储按字节序完成拷贝,这种拷贝叫做浅拷贝,或者值拷贝。class Dateprivate:// 基本类型(内置类型)// 自定义类型Time _t;// 用已经存在的d1拷贝构造d2,此处会调用Date类的拷贝构造函数。

2024-05-30 21:53:20 1716 66

原创 【C++修行之道】类和对象(二)类的6个默认成员函数、构造函数、析构函数

A _aa;class Datepublic:private:// 默认生成构造函数// 内置类型没有规定要处理(可处理,可不处理,看编译器)int _year;int _month;int _day;// 自定义类型调用默认构造函数Time _t;d2.Print();

2024-05-30 08:45:00 2438 30

原创 mysql运算符(一)

不等于运算符(和!算术运算符主要用于数学运算,其可以连接运算符前后的两个数值或表达式,对数值或表达式进行加(+)、减(-)、乘(*)、除(/)和取模(%)运算。比较运算符用来对表达式左边的操作数和右边的操作数进行比较,比较的结果为真则返回1,比较的结果为假则返回0,其他情况则返回NULL。可以看到,使用安全等于运算符时,两边的操作数的值都为NULL时,返回的结果为1而不是NULL,其他返回结果与等于运算符相同。等号运算符(=)判断等号两边的值、字符串或表达式是否相等,如果相等则返回1,不相等则返回0。

2024-05-28 22:45:14 1228 44

原创 【C++修行之道】类和对象(一)、类的定义、类的访问限定符及封装、类的作用域 、类的实例化、类对象模型 、this指针

类体(类域):由成员函数和成员变量组成// 一定要注意后面的分号class为定义类的关键字ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的方法或者成员函数。在类中定义一般情况下,更期望采用第二种方式。注意:上课为了方便演示使用方式一定义类,大家后序工作中尽量使用第二种。// 我们看看这个函数,是不是很僵硬?

2024-05-26 12:38:55 1165 55

原创 【C++修行之道】命名空间 、C++输入&输出、缺省参数和函数重载

定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{ }即可,{ }中即为命名空间的成员。// bit是命名空间的名字,一般开发中是用项目名字做命名空间名。// 命名空间中可以定义变量/函数/类型int val;// 不同的域可以定义同名变量// :: 预作用限定符, _::标识符// _处为空时,默认访问全局变量return 0;

2024-05-25 16:42:15 1048 49

原创 【C++修行之道】引用、内联函数、auto关键字、for循环(C++)、nullptr(C++11)

在早期C/C++中auto的含义是:使用auto修饰的变量,是具有自动存储器的局部变量,但遗憾的是一直没有人去使用它,大家可思考下为什么?auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得。return 10;auto b = a;//auto e;无法通过编译,使用auto定义变量时必须对其进行初始化return 0;【注意】

2024-05-25 11:35:37 1008 47

原创 使用固定公网地址远程访问本地Linux系统部署的SQL Server数据库

简单几步实现在Linux centos环境下安装部署SQL Server数据库,并结合cpolar内网穿透工具,创建安全隧道将其映射到公网上,获取公网地址,实现在外异地远程连接家里/公司的数据库,而无需公网IP,无需设置路由器,亦无需云服务器。

2024-05-09 00:02:34 816 55

原创 mysql数据库(排序与分页)

第一个“位置偏移量”参数指示MySQL从哪一行开始显示,是一个可选参数,如果不指定“位置偏移量”,将会从表中的第一条记录开始(第一条记录的位置偏移量是0,第二条记录的位置偏移量是1,以此类推);需要说明的是,这条语句是先取出来前 5 条数据行,然后再按照 hp_max 从高到低的顺序进行排序。MySQL 8.0中可以使用“LIMIT 3 OFFSET 4”,意思是获取从第5条记录开始后面的3条记录,和“LIMIT 4,3;背景1:查询返回的记录太多了,查看起来很不方便,怎么样能够实现分页查询呢?

2024-05-06 19:55:57 1133 19

原创 mysql数据库概念和基本语法(一)

列式数据库是相对于行式存储的数据库,Oracle、MySQL、SQL Server 等数据库都是采用的行式存储(Row-based),而列式数据库是将数据按照列存储到数据库中,这样做的好处是可以大量降低系统的I/O,适合于分布式文件系统,不足在于功能相对有限。核心原理是“倒排索引”。45 年前,也就是 1974 年,IBM 研究员发布了一篇揭开数据库技术的论文《SEQUEL:一门结构 化的英语查询语言》,直到今天这门结构化的查询语言并没有太大的变化,相比于其他语言, SQL 的半衰期可以说是非常长 了。

2024-05-02 17:32:36 856 3

原创 如何使用File Browser结合cpolar实现远程访问和共享本地储存的文件

File Browser是一个开源的文件管理器和文件共享工具,它可以帮助用户轻松地管理他们的文件和文件夹,并通过Web界面进行访问和共享。它通常用于自托管的云存储解决方案,允许用户在自己的服务器上创建和管理文件存储服务,类似于Google Drive或Dropbox。File Browser的主要功能包括文件和文件夹的上传、下载、重命名、复制、粘贴、删除等操作,以及文件搜索、预览和分享链接生成。它还支持用户和权限管理,以确保文件的安全性和隐私性。

2024-04-28 16:29:22 533 44

原创 如何在CentOS安装Firefox并结合内网穿透工具实现公网访问本地火狐浏览器

使用上面的Cpolar https公网地址,在任意设备的浏览器进行访问,即可成功看到我们火狐浏览器界面,这样一个公网地址且可以远程访问就创建好了,使用了cpolar的公网域名,无需自己购买云服务器,即可发布到公网进行远程访问!上面在本地成功部署了FireFox 火狐浏览器,并局域网访问成功,下面我们在Linux安装Cpolar内网穿透工具,通过cpolar 转发本地端口映射的http公网地址,我们可以很容易实现远程访问,而无需自己注册域名购买云服务器.下面是安装cpolar步骤。

2024-04-16 17:16:54 2031 51

原创 背包问题详解(01背包,完全背包,多重背包,分组背包)

有 N 件物品和一个容量是 V的背包。每件物品只能使用一次。第 i 件物品的体积是 vi,价值是 wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行两个整数,N,V,用空格隔开,分别表示物品数量和背包容积。接下来有 N 行,每行两个整数 vi,wi,用空格隔开,分别表示第 i 件物品的体积和价值。输出格式输出一个整数,表示最大价值。数据范围0

2024-04-09 12:16:57 3659 14

原创 如何使用VNC+Cpolar实现Windows电脑公网远程控制Ubuntu系统桌面

SVN 是 subversion 的缩写,是一个开放源代码的版本控制系统,通过采用分支管理系统的高效管理,使得多个人可以共同开发同一个项目,实现共享资源,实现最终集中式的管理。Subversion作为一个通用的系统,可用来管理任何类型的文件,其中包括程序源码。SVN与CVS一样,也是一个跨平台的软件,支持大多数常见的操作系统。本篇教程主要介绍SVN服务器在Windows平台上的安装和配置过程。与如何结合cpolar内网穿透工具,实现随时随地公网远程访问内网本地服务。

2024-04-03 16:00:03 1207 46

原创 【实现报告】学生信息管理系统(链表实现)

定义了一个名为student的结构体,用于存储单个学生的信息。char no[8];:存储8位学号。:存储学生姓名,最多19个字符加上一个字符串结束符\0。:存储学生的成绩,类型为double以支持小数。:定义了一个新的类型名ElemType,其实就是student结构体。这样做可以增加代码的可读性和可维护性,也方便以后对元素类型的修改。定义了链表节点的结构体,每个节点包括::数据域,用于存储一个ElemType类型的数据,在这里即为student结构体实例。

2024-03-30 15:56:16 1589 43

原创 【实现报告】学生信息管理系统(顺序表)

1、掌握线性表的定义;2、掌握线性表的基本操作,如建立、查找、插入和删除等。定义一个包含学生信息(学号,姓名,成绩)的顺序表和链表,使其具有如下功能:(1) 根据指定学生个数,逐个输入学生信息;(2) 逐个显示学生表中所有学生的相关信息;(3) 根据姓名进行查找,返回此学生的学号和成绩;(4) 根据指定的位置可返回相应的学生信息(学号,姓名,成绩);(5) 给定一个学生信息,插入到表中指定的位置;(6) 删除指定位置的学生记录;(7) 统计表中学生个数。

2024-03-29 08:00:00 1419 29

原创 蓝桥杯练习题总结(三)线性dp题(摆花、数字三角形加强版)

小明的花店新开张,为了吸引顾客,他想在花店的门口摆上一排花,共m盆。首先,需要明确问题的要求:给定n种不同的花和每种花的最大数量限制,求出在摆放m盆花时,能够形成的不同摆花方案数。这个问题的关键在于每种花可以选择摆放的数量从0到其最大限制,且摆放的花必须按照花的种类顺序排列。首先,需要明确问题的要求:给定n种不同的花和每种花的最大数量限制,求出在摆放m盆花时,能够形成的不同摆花方案数。其他情况(即当j>0时),在没有考虑任何花的情况下是不可能摆放任何花的,这些状态默认为0,反映了不可能发生的情况。

2024-03-25 21:04:08 1508 38

原创 DP动态规划入门(数字三角形、破损的楼梯、安全序列)

动态规划(Dynamic Programming,简称DP)是运筹学的一个分支,它是一种通过将复杂问题分解成多个重叠的子问题,并通过子问题的解来构建整个问题的解的算法。动态规划的关键在于找到子问题之间的重叠关系,并存储这些子问题的解以避免重复计算。通过这种方式,动态规划能够在多项式时间内解决一些看似复杂的问题,如背包问题、最短路径问题等。在实际应用中,动态规划被广泛用于优化和控制问题,以及计算机视觉、生物信息学等领域。

2024-03-22 08:30:00 3059 55

原创 蓝桥杯练习题总结(二)dfs题、飞机降落、全球变暖

具体来说,如果一块陆地像素(用“#”表示)与海洋像素(用“.”表示)相邻(即上下左右四个相邻像素中有海洋),这块陆地就会被淹没,变成海洋。这可以通过遍历整个照片来完成,每当我们遇到一个“#”(陆地)字符,我们就从这个点开始进行深度优先搜索(DFS),以找出这块陆地连接的所有部分,即一个完整的岛屿。如果岛屿的任何一部分位于边缘(即,与地图边缘的海洋相邻)或者有至少一个部分的上下左右四个方向中有一个是海洋,则这个岛屿将不会被完全淹没。具体来说,我们确定总队伍数量后,对于每一个人(或元素),枚举他所属的队伍。

2024-03-21 08:30:00 1854 65

原创 蓝桥练习题总结(一)字母图形、完美的代价、01串、序列求和

回文串,是一种特殊的字符串,它从左往右读和从右往左读是一样的。现在给你一个串,它不一定是回文的,请你计算最少的交换次数使得该串变成一个完美的回文串。// 更新字符串的末尾索引t,并将匹配的字符移动到其正确的位置。这是一个5行7列的图形,请找出这个图形的规律,并输出一个n行m列的图形。// 如果i和k相遇,说明中间的字符没有匹配的字符。第一行是一个整数N,表示接下来的字符串的长度(N

2024-03-20 08:30:00 1056 55

原创 堆排序(向下调整法,向上调整法详解)

普通的二叉树是不适合用数组来存储的,因为可能会存在大量的空间浪费。而完全二叉树更适合使用顺序结构存储。现实中我们通常把堆(一种二叉树)使用顺序结构的数组来存储,需要注意的是这里的堆和操作系统虚拟进程地址空间中的堆是两回事,一个是数据结构,一个是操作系统中管理内存的一块区域分段。

2024-03-18 13:09:44 1901 84

原创 DFS(深度优先遍历、N皇后问题、2N皇后问题)

尽管在很多情况下回溯法和DFS是紧密相关的,但它们并不总是等价的。回溯法更侧重于问题的求解策略,而DFS更侧重于图的遍历策略。然而,在实际应用中,这两个概念经常交织在一起。

2024-03-15 08:15:00 1375 51

原创 如何在Windows系统部署Jellyfin Server并实现公网访问内网影音文件

随着移动智能设备的普及,各种各样的使用需求也被开发出来,从最早的移动听音乐、看图片(MP3时代),到之后的移动视频需求(MP4时代)到现在的移动流媒体需求(智能手机看视频)。但当我们习惯这些需求后,忽然发现自己不知不觉间成了待割的韭菜(3台设备就要加钱)。作为一颗倔强的韭菜,自然不会甘愿被割,因此打算自建一个私人影音媒体平台。现在,笔者就向大家展示,使用cpolar内网穿透+ Jellyfin,自建私人影音平台的全过程。

2024-03-08 16:11:33 2156 83

原创 位运算(位运算的技巧、二进制中1的个数、区间或、异或森林)

作用:二进制数向左边移动,右边补0.左移操作符相当于对原数进行乘以2的幂次方的操作对于整数5(二进制表示为00000101),执行左移三位操作,相当于执行 5 * (

2024-03-06 09:48:55 1366 21

原创 贪心算法练习题(最小化战斗力差距、谈判、纪念品分组、分糖果)

贪心的基本原理:每一步都选择局部最优解,而尽量不考虑对后续的影响,最终达到全局最优解。贪心的局限性:贪心算法不能保证获得全局最优解,但在某些问题上具有高效性。贪心的特征:贪心选择性质、最优子结构性质(根据我的观察,很多贪心的题目会出现“不同的操作产生的贡献相同”的特征,在此特征下我们每次选择代价最小的)。贪心的类型多且杂,难以划分,需要不断练习和积累。

2024-03-05 08:15:44 1028 35

原创 差分题练习(区间更新)

对于一个数组a[],差分数组diff[]的定义是:对差分数组做前缀和可以还原为原数组:在修改完成后,需要做前缀和恢复为原数组,所以上面这段代码的含义是:diff[l]+=x表示将区间[l, n]都加上x但是[r+1,n]我们并不想加x,所以再将[r+1,n]减去x即可。但是注意,差分数组不能实现“边修改边查询(区间和),只能实现"多次修改完成后多次查询"。如果要实现“边修改边查询”需要使用树状数组、线段树等数据结构。

2024-03-03 17:41:47 477 20

原创 前缀和算法题(区间次方和、小蓝平衡和、大石头的搬运工、最大数组和)

prefix表示前缀和,前缀和由一个用户输入的数组生成。对于一个数组a[](下标从1开始),我们定义一个前缀和数组prefix[],满足:prefix有一个重要的特性,可以用于快速生成prefix:prefix可以O(1)的求数组a[]的一段区间的和:但是注意,prefix是一种预处理算法,只适用于a数组为静态数组的情况,即a数组中的元素在区间和查询过程中不会进行修改。如果需要实现“先区间修改,再区间查询”可以使用差分数组,如果需要“一边修改,一边查询”需要使用树状数组或线段树等数据结构。

2024-03-03 12:59:48 821 14

原创 进制算法题(进制转换、Alice和Bob的爱恨情仇)

同理可得,在一个偶数堆中则是取偶数次。故可知对于 (1,2,…,)(a1​,a2​,…,an​) 会有所对应的 (1,2,…,)(b1​,b2​,…,bn​) ,其中 bi​ == ( ai​ % 22 ) ,当 bi​ 为 1 时代表取奇数, bi​ 为 0 时代表取偶数。由此可得出 ans= (1,2,…)(b1​,b2​,…,bn​) % 2,其中 ans 为 1 时代表总取数为奇数,即 Alice 赢,ans 为 0 时代表总取数为偶数,即 Bob 赢。

2024-03-02 08:45:00 1093 30

原创 模拟算法题练习(二)(DNA序列修正、无尽的石头)

问题描述在生物学中,DNA序列的相似性常被用来研究物种间的亲缘关系。现在我们有两条 DNA序列,每条序列由 A、C、G、T 四种字符组成,长度相同。但是现在我们记录的 DNA序列存在错误,为了严格满足 DNA 序列的碱基互补配对即 A-T和C-G,我们需要依据第一条 DNA 序列对第二条 DNA 序列进行以下操作:1.选择第二条 DNA 序列的任意两个位置,交换他们的字符,2.选择第二条 DNA 序列任意一个位置,将其字符替换为 A、C、G、T 中的任何一个。

2024-03-01 12:13:15 879 15

原创 递归算法题练习(数的计算、带备忘录的递归、计算函数值)

概念:递归是指函数直接或间接调用自身的过程。解释递归的两个关键要素:基本情况(递归终止条件):递归函数中的一个条件,当满足该条件时,递归终止,避免无限递归。可以理解为直接解决极小规模问题的方法。递归表达式(递归调用):递归函数中的语句,用于解决规模更小的子问题再将子问题的答案合并成为当前问题的答案。

2024-03-01 11:58:55 1186 39

原创 如何实现无公网ip远程访问本地安卓Termux部署的MySQL数据库【内网穿透】

Android作为移动设备,尽管最初并非设计为服务器,但是随着技术的进步我们可以将Android配置为生产力工具,变成一个随身Linux。MariaDB是MySQL关系数据库管理系统的一个复刻,由社区开发,有商业支持,旨在继续保持在 GNU GPL 下开源。开发这个分支的原因之一是:甲骨文公司收购了MySQL后,有将MySQL闭源的潜在风险,因此社区采用分支的方式来避开这个风险。

2024-02-29 19:26:01 2318 69

原创 模拟算法题练习(一)(扫雷,灌溉,回文日期)

模拟算法通过模拟实际情况来解决问题,一般容易理解但是实现起来比较复杂,有很多需要注意的细节,或者是一些所谓很“麻模“的东西。模拟题一般不涉及太难的算法,一般就是由较多的简单但是不好处理的部分组成的,考察选手的细心程度和整体思维逻辑。一般为了使得模拟题写的逻辑清晰一些,经常会写比较多的小函数来帮助解题,例如int和string的相互转换、回文串的判断日期的转换、各种特殊条件的判断等等。

2024-02-29 19:21:23 1191 14

原创 枚举(蓝桥练习)(反倍数、特别数的和、找到最多的数、小蓝的漆房、小蓝和小桥的挑战)

枚举算法是一种基本的算法思想,它通过穷举所有可能的情况来解决问题。它的基本思想是将问题的解空间中的每个可能的解都枚举出来,并进行验证和比较,找到满足问题条件的最优解或者所有解。枚举算法适用于问题规模较小、解空间可穷举的情况。它的优点是简单直观,不需要复杂的数学推导,易于实现。但是,由于需要穷举所有可能的情况,对于问题规模较大的情况,枚举算法的时间复杂度可能会非常高,效率较低。

2024-02-28 18:07:32 1141 22

空空如也

空空如也

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

TA关注的人

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