自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

像个博客

世界上只有两句真理:1、人一定会死。2、程序一定有Bug

  • 博客(62)
  • 资源 (158)
  • 收藏
  • 关注

原创 智能指针的由来

三种难以判断的指针空指针:值为null的指针空悬指针:指向已经销毁的对象或者已经回收的地址的指针野指针:未经初始化的指针1. 原始指针的问题指向对象的原始指针如果时坏的,尤其时当暴露给其他线程时,容易发生内存方面的问题;比如总容易放生的空悬指针问题。例:有俩个指针p1,p2,指向堆上的同一个对象object,p1,p2位于不同的线程中,假设线程A通过p1将对象销毁了(尽管把p1置为了NULL),那p2就成了空悬指针,这是一种典型的C++内存错误。2.一个"解决办法"一个解决空悬指

2021-04-30 11:38:18 224 1

转载 Container With Most Water

题目#Given n non-negative integers a1, a2, …, an , where each represents a point at coordinate (i, ai). n vertical lines are drawn such that the two endpoints of line i is at (i, ai) and (i, 0). Find two lines, which together with x-axis forms a container.

2021-02-26 09:59:21 198

转载 Two Sum

题目#Given an array of integers, return indices of the two numbers such that they add up to a specific target.You may assume that each input would have exactly one solution, and you may not use the same element twice.Example:Given nums = [2, 7, 11.

2021-02-25 17:55:03 187

翻译 QGraphicsView Class

目录使用构造函数枚举属性属性方法事件信号槽使用头文件: #include <QGraphicsView> 配置: QT += widgets 初始版本: Qt 4.2 基类: QAbstractScrollArea 构造函数QGraphicsView::QGraphicsView(QWidget *parent = nullptr);QGraphicsView::QGraphicsView(QGraphics

2021-01-22 15:26:13 429

翻译 QGraphicsScene Class

头文件: #include <QGraphicsScene> 配置: QT += widgets 初始版本: Qt 4.2 基类: QObject 构造函数//使用(x,y)指定的矩形以及其场景矩形的给定宽度和高度,构造一个QGraphicsScene对象。父参数传递给QObject的构造函数。QGraphicsScene::QGraphicsScene(qreal x, qreal y, qreal width, qreal height, QO

2021-01-22 14:16:57 470

原创 Lua向C函数中传递table参数

传递纯数组参数 test.luamytest = nilmytest = require "iTest"if not mytest then print("Failed to require iTest!")else print("Succend to require iTest!");endfunction TestFunc() local testtabl = {4,8,9,7,1,0,3,2,6,5} --需要传递的table print("Func_ma..

2020-12-07 11:10:36 1827 1

原创 Lua调用C++函数

1.调用C函数C文件//对于被Lua调用的函数必须符合typedef int (*lua_CFunction)(lua_State* L)格式//其中返回值是返回值的个数#ifdef _cplusplusextern "C"{#endif int add(lua_State* L) { int a = lua_tonumber(L,1); int b = lua_tonumber(L,2); lua_pop(L,2); lua_pushnumber(L,a+b);

2020-11-27 15:48:20 1892

原创 Lua table(表)

table 是 Lua 的一种数据结构用来帮助我们创建不同的数据类型,如:数组、字典等。Lua table 使用关联型数组,你可以用任意类型的值来作数组的索引,但这个值不能是 nil。Lua table 是不固定大小的,你可以根据自己需要进行扩容。Lua也是通过table来解决模块(module)、包(package)和对象(Object)的。 例如string.format表示使用"format"来索引table string。1.表的创建及表的介绍--table 是lua的一种.

2020-11-26 18:11:45 852

原创 C向Lua函数传递table参数

test.lua--查找table中的最大值function getmaxvalue(tabl) maxvalue=0 for i = 1, #tabl, 1 do if tabl[i] > maxvalue then maxvalue = tabl[i] end end return maxvalueendrest.clua_State*L = luaL_newstate(); //返回一個指向棧頂的指針if(L == nullptr){ re

2020-11-23 14:56:31 814

原创 IP协议完整数据结构

一 IP协议IP协议的完整数据结构为:以太网数据头|IP数据头| TCP/UDP数据包头 |数据1.以太网头#define ETHER_ADDR_LEN 6 //以太网数据头结构体,共14字节typedef struct ether_header{ u_char ether_dhost[ETHER_ADDR_LEN]; //目的MAC地址 6字节 u_char ether_shost[ETHER_ADDR_LEN]; //源MAC地址 6字节 u_s...

2020-09-22 10:46:51 1824 1

原创 qdebug输出中文乱码

记得改一下配置!工具->文本编辑器->行为->UTF-8BOM:改为"如果编码是UTF-8则添加"

2020-07-16 10:46:07 1916

原创 dllimport与dllexport作用与区别

从msdn的(在Dll中为导出类,在调用Dll工程的exe中为导入类)解释中可以知道在编译DLL的时候,动态库上的类,函数,变量都应该用dllexport设置为导出在使用DLL时,动态库上的类,函数,变量都应该用dllimport设置为导入如何做到这点呢一个简单的做法就是在DLL的.cpp加入#define DLLCLASS_EXPORTS在头文件中加入#ifdef DLLCLASS_EXPORT #define EXT_CLASS _declspec(dllexp.

2020-07-09 08:39:18 1473

原创 MFC无界面后台运行程序

1.头文件声明主界面指针class CXXXXDlg;//主界面类前置声明class CXXXXApp : public CWinApp{public: CXXXXApp(); CXXXXDlg *m_pDlg;//声明一个主界面指针public: virtual BOOL InitInstance(); DECLARE_MESSAGE_MAP() virtual int ExitInstance();};extern CLedSettLockApp theApp;2

2020-05-29 09:01:49 1328

原创 (C++实现)设计模式一:工厂模式

工厂模式:工厂模式在简单工厂模式的基础上将工厂也抽象为一个抽象工厂,不同的产品放在不同的工厂中取生产(在不同的工厂子类中实例化)#include <iostream>#include <string>#include <time.h> #include <math.h>using namespace std;#define Sam...

2019-12-16 10:38:17 138

原创 (C++实现)设计模式一:简单工厂模式

简单工厂模式:简单工厂模式非常好理解,很多开发同行甚至在没接触过设计模式就已经使用过这种模式。简单模式就是将将产品抽象,在一个工厂去判断不同产品的生产(实例化)#include <iostream>#include <string>#include <time.h> #include <math.h>using namespa...

2019-12-16 10:34:33 186

原创 中国省-市-县(区)三级城市数据(json和数组)

{ "北京市":{ "北京市":["东城区","西城区","朝阳区","丰台区","石景山区","海淀区","门头沟区","房山区","通州区","顺义区","昌平区","大兴区","怀柔区","平谷区","密云区","延庆区"] }, "天津市":{ "天津市":["和平区","河东区","河西区","南开区","河北区","红桥区","东丽区","西青区","津南区","北辰区...

2019-08-27 16:37:40 5017 2

原创 自绘菜单(CMenu)

.CPP#include "stdafx.h"#include "MyMenu.h"CMyMenu::CMyMenu(){ m_szItemSize.cx = 95; m_szItemSize.cy = 26; m_nTextSize = 13; m_sResourceType = _T("PNG"); m_sTextName = _...

2019-07-01 13:55:57 420

原创 把资源中的PNG(背景透明)图标图标设置为菜单图标

首先导入PNG图像到资源中,需要自定义资源文件夹,然后导入图像,如图所示:加载png图像,返回HBITMAP对象_inline HBITMAP XXXDlg::loadimage(UINT nResID){ CImage m_Image; CComPtr<IStream> stream; stream = NULL; HBITMAP hbitmap; // ...

2019-07-01 13:54:49 545

原创 寻找两个三角形重合部分的最大三角形

如图所示,两个三角形重合存在很多种情况,上图举出其中4个例子,本文要讲的是已知两个三角形三个顶点坐标,求重叠部分最大三角形的顶点坐标;虽然已知顶点坐标,位置关系已经确定,但是编程解决的是一类问题,所以各种情况还是要考虑到。定义变量保存结果 double resultx[3]; double resulty[3];两个三角形的坐标变量 doub...

2019-06-28 12:12:09 1334

原创 自学C#之路14——线程同步

线程同步也称线程管理。在线程的生命周期中,线程的状态并非一成不变的,它可能经历多种状态。线程的状 态由 Thread 类的 ThreadState 属性表示。线程同步就是需要我们手动设置线程的不同状态来实现。在大多数时候,计算机中都会有多个线程并发运行。有些线程之间是没有任何联系的, 它们各自独立运行,互不干扰,这类线程称为无关线程。而有些线程之间则是有联系的, 比如一个线程等待另...

2018-11-22 15:03:00 183

原创 自学C#之路13——多线程

操作系统以进程(Process)的方式运行应用程序,进程不但包括应用程序的指 令流,也包括运行程序所需的内存、寄存器等资源。在一个进程中我们可以创建多个个线程(Threading)来实现多个任务“同时”进行的目标。注:在单核 CPU 的计算机操 作系统将自动以“时间片轮转”的方式交替执行线程指令,多核心 CPU,使得线程能够真正的实现同步执行。在 C#中,线程由 System.Thre...

2018-11-22 13:41:48 276

原创 自学C#之路12——绘图

提到绘图在MFC中很容易想到GDI,GDI提供了很多基本的绘图操作。但是难以完成复杂的绘图。所以微软额外提供了Microsoft Windows GDI+。Microsoft Windows GDI+是为 C/C++开发者提供的一个基于类的应用程序编程接口(API)。 使用前需要外部链接。但C#背靠.net好乘凉。在.NET 中直接通过 GDI+(Graphics Device Interfa...

2018-11-21 14:45:31 475

原创 自学C#之路11——事件

上一篇文章我们讲到委托,委托其实就可以看成一类函数的类型定义。委托中的代码实例将委托和方法都放在一个类中,这样做是为了便于理解。但实际应用中 public void CircusStart(AnimalPlay animalPlay, string name)在一个类中public void DogPlay(string greetings)在另一个类中,并且面向对象设计,...

2018-11-21 10:26:38 224

原创 自学C#之路10——委托

本篇以一个马戏表演实例开始   看到上面这段立马就想起来C++中的回调函数,感觉很像 代码结构几乎一致,实现的效果也和类似。请忽略两只狗长的不一样!那这里我就是这么理解的回调函数的意义就是把函数指针作为参数传入回调函数,说到底委托和回调函数都是给一类结构相同的函数(返回值和参数相同)定义一种类型。和给整数定义为int类似。函数一旦有类型就能够作为参数...

2018-11-20 16:22:06 194

原创 自学C#之路9——windows窗体应用初识

在“项目类型”栏中选择“Visual C#”下的“Windows”选项,然后在“模板” 栏中选择“Windows 应用程序”就能创建一个Windows窗体应用程序。 右击窗 体编辑器中的窗体,选择“查看代码”命令,就打开了一个名为“Form1.cs”文件public partial class Form1 : Form 在 Form1 类的定义中使用了 partial 关键...

2018-11-20 16:21:02 333

原创 自学C#之路8——异常

异常(Exception)就是程序执行期间发生的问题。无论编程技术有多好,程序都难免 出现异常情况,而且错误发生的原因并不总在程序员,比如用户输入了非法数据,要读取 的文件不存在等等。如果不处理这些异常,程序可能会崩溃,但如果在程序中过多的处理 这些异常,会使程序结构不清晰。为此,C#为我们提供了一套完美的方案,让我们在程序 主线之外处理异常,不但使程序更加健壮、更加容错,而且保持了程序结构的清晰...

2018-11-20 16:19:30 248

原创 自学C#之路7——装箱和拆箱

C#中的变量分为值类型和引用类型两种。值类型变量存储在栈上,比较简单;引用型变量存储在堆上,比较复杂。 int n = 123; Object obj = n; //装箱 string s = obj.ToString(); 这里 C#在暗中进行了魔术转换——装箱(Boxing)。装箱操作能把值类型数据打包到引用型变量中,使我们能够像使用对象一样使用值类型变量。 系统先创建...

2018-11-20 16:15:01 213

原创 自学C#之路6——.NET

本文基本为概念,请做好无聊的准备NET 框架(.NET Framework)是微软为开发应用程序而创建的一个富有革命性的全 新的编程平台。如何理解它呢?最简单的方式是把.NET 框架理解为代码的执行环境,一 方面它管理代码的执行过程,另一方面它为代码提供类库支持1.公共语言运行时 用.NET 平台编写的代码一般都在公共语言运行时(Common Language Runtime,CLR) 的...

2018-11-20 16:12:35 1113

原创 自学C#之路5——接口

接口用关键字 interface 定义,接口的名称习惯上以字母 I 开头。一般情况下,接口中 只能包含成员的声明,不能有任何实现代码。接口的成员总是公有的,不需要也不能添加 public 等修饰符,也不能声明为虚方法或静态方法。 //接口:银行账户 interface IBankAccount { //方法:存款 void PayIn(decimal amo...

2018-11-20 16:11:48 269

原创 自学C#之路4——面向对象(继承)

 “一生二,二生三,三生万物”,世间万物往往具有因果衍生关系。面向对象编程吸取 了这种思想,可以从现有的类衍生出新的类,类类相生,生生不息。那么如何由一个类衍 生出新类呢?我们创建一个脊椎动物类(Vertebrata),然后由它派 生出哺乳动物类(Mammal),最后再由哺乳动物类派生出人类(Human)。 class Vertebrata { //私有成员 ...

2018-11-20 16:08:10 178

原创 自学C#之路3——面向对象(类)

 面向对象面向对象的概念最早出现在Simula 67中,流行于C++,在Java等面向对象语言相继诞生之后达到高峰。面向对象的诞生是软件发展的必然选择。相对于过程语言,面向对象解决的是模块之间的解耦,模块的独立性大大的降低了软件代码量越来越大来带来的开发和维护的复杂程度。面向对象的基本概念主要有类、封装、接口和对象 创建类并实例化 上图创建了这么一个类,可以看出...

2018-11-20 16:01:13 190

原创 自学C#之路2——枚举,数据结构,数组

 枚举 C#中的枚举与C++中没有区别,不做过多学习;数据结构数据结构几乎与C++有些不一样左(C#)右(C++)上面那张图是C#和C++在结构定义方面的差别在习惯C++模式之后使用C#的结构体一度感觉很烦,C#如果要改变变量的默认访问权限,必须给每个变量都得添加对应关键字。使用上的烦恼就更大了;在C++中使用结构体,一般我会将结构体全都定义到一个头文件...

2018-11-20 16:00:19 252

原创 自学C#之路1——Hello World

 介绍一下我看的书叩响C#之门在百度百科中对这本书的介绍是这样的图书简介图中划红线的地方是这本书最吸引我的地方;书中插图初识:C# 不要傻傻地读作“C 井”,而应酷酷的读做“C Sharp”。它的含义是在 C++的基础上再扩展两个+,即 C++++。从名字就可以看出, C#是从 C++的基础上发展而来的。我使用的IDE是Visual Studio 201...

2018-11-20 15:58:36 4350

原创 CComPtr(com智能指针)用法以及CImage加载图像流示例

 1. **COM接口指针很危险**COM接口指针很危险,因为使用过程中需要每一个使用者都要严格并且正确的AddRef和Release,一旦出现问题,就会造成对象不能被正常释放,或者对象被重复删除,造成程序崩溃。所以使用COM接口,必须小心翼翼才行。但是,即使所有的代码中,都正确的AddRef和Release,也不一定能保证万无一失,例如:void SomeApp( IHello * ...

2018-10-19 09:25:03 379

原创 MFC 渐变色背景以及控件透明处理

mfc实现某对话框背景色渐变如果是单文档视图结构,在OnDraw实现代码,如果是对话框结构,在该对话框所在的cpp里的OnPain函数【如果没有这个函数,请在类向导里派生】里实现如下代码即可,本示例是在对话框结构,某个对话框里实现的,效果如下附图CPaintDC dc(this); // device context for painting CRect Rect; Ge...

2018-10-18 09:38:00 1549

原创 关于Windows字体高度计算

LOGFONT lf;strcpy(lf.lfFaceName,TextFaceName);lf.lfCharSet=TextCharFormat;lf.lfWeight=TextWeight;lf.lfWidth=TextSize;lf.lfHeight=-MulDiv(TextSize, GetDeviceCaps(hDC, LOGPIXELSY), 72);lf.lfItali...

2018-10-12 15:17:56 1282

转载 时间复杂度详解,稳重中带一点皮

--------------------- 作者:Eirlys_North 来源:CSDN 原文:https://blog.csdn.net/Eirlys_North/article/details/52959540?utm_source=copy 版权声明:本文为博主原创文章,转载请附上博文链接!-宝宝为啥听不懂他们在讨论的时间复杂度 0.0-我怎么知道这个算法运行得比那个算法快 0.0...

2018-10-10 10:50:46 292

原创 -1.#IND和-1.#INF等“无效”浮点数说明及其判断

常用的浮点数INF&amp;NaN判断方法: Windows中,使用_isnan判断NaN情况;使用!_isnan &amp;&amp; !_finite判断INF情况;使用!_finite判断NaN和INF两种情况  //0/0的情况下或得到NAN,非零除以零会得到INF double spread=0.0; spread/=0.0; if (_isna...

2018-09-21 10:01:41 1819

原创 CImage实现多张图像的查看以及图像自由缩放,拖动

CImage提供了增强的位图支持,包括加载和保存 JPEG、 GIF、 BMP 和可移植网络图形 (PNG) 格式的图像的能力。为加载图像提供了更方便,更多样的选择,本文以CImage为核心实现多张图像的查看以及图像缩放,拖动。1.载入图像void XXXDlg::OnDropFiles(HDROP hDropInfo){ // TODO: 在此添加消息处理程序代码和/或调用默认...

2018-09-14 17:00:33 2005 3

原创 按修改时间重命名批处理(C++)

按修改时间重命名批处理(C++)实现步骤:1.获取指定目录下所有文件文件名2.获取所有文件创建时间,修改时间,访问时间3.根据文件时间排序4.根据排序重命名文件 1.获取指定目录下所有文件文件名 std::vector&lt;CString&gt; Files; //记录文件名void GetPathFile(CString strDir){ CFileFin...

2018-09-14 16:59:27 1486

雷塞运动控制器VC++例程

雷塞运动控制器VC++例程,

2019-04-24

C# File文件操作

C# 关于文件的操作。集合篇,源码分享

2018-05-24

C# Intnet 编程

C# Intnet 编程 C# 网络编程

2018-05-24

C#SQL Server

C# SQL Server 编程实例。。。。。。。。。。。。。。。。。。。。。。。。

2018-05-24

C# ChatServer

C# 语言编程,网络编程。实例分享。。。。。。。。。。。。

2018-05-24

C#编程实例

C# 语言编程实例,简单的应用分析,入门有帮助,0000000

2018-05-24

C++MFC编程,最小化按键设计

C++MFC编程,最小化按键设计。源码分享,嘿嘿。。。。。

2018-05-24

C++ 字符替换

C++语言编程中,字符串操作,替换字符串。源码分享。。

2018-05-24

C++字符串中检测特定的字符串

C++ 语言中关于字符串编程。字符串中查找字符串。。。。

2018-05-24

C++ 检测计算机信息

C++ 语言编程中,检测本地计算机信息源码程序。分享源码,获取过呢更多

2018-05-24

C++ 获取程序运行目录

C++语言编程中关于字符串编程。获取程序运行目录i,源码

2018-05-24

C++ 根据表示符号拆分字符串

C++ 根据表示符号拆分字符串。根据特定的标识符拆分现有的字符串

2018-05-24

C++反转字符串

C++语言编程中,反转字符串编程,实例源码。。。。。。。。

2018-05-24

C++ 多种数据类型转换

C++ 多种数据类型转换,包括C++语言的常用数据类型之间的转换

2018-05-24

C++中拆分钱币问题

C++ 语言编程中,拆分钱币的经典问题,源码解释。不断前进

2018-05-24

C++数组之中的最大值最小值应用

C++数组之中的最大值最小值应用。求数组中最大最小值。

2018-05-24

C++ List Control 应用

C++编程,ListControl控件应用,C++控件进阶应用,程序实例

2018-05-24

C++IO流拆分字符串

C ++学习之路,io流拆分字符串。多中方法实现字符串的拆分源码

2018-05-24

C++Edit控件应用

C++Edit控件应用,MFC界面编程,EDIT控件高级应用,C++进阶之路

2018-05-24

Windows操作系统快捷键整合

Windows操作系统快捷键整合,使用Windows平台必须掌握的技术

2018-05-24

VS2010 编程工具 快捷键大全

VS2010 编程工具 快捷键大全,开发工具快捷键集合,向前

2018-05-24

WINDOWS -CMD

Windows平台下的CMD命令。C#-C++等等都可以是学习使用

2018-05-24

C++windows消息和CMD集合

C++windows消息和CMD集合,C++语言编程中必经之路,向前

2018-05-24

C++ 编程资料--书籍

C++ 编程资料--书籍--深入浅出,入门级教材,欢迎使用

2018-05-24

C# 多线程编程

C#编程语言的中线程的简单介绍,包括各种环境下的多线程使用

2018-05-24

Bus Hound秘钥

Bus Hound秘钥,Bus Hound秘钥,Bus Hound秘钥,Bus Hound秘钥,Bus Hound秘钥

2018-05-23

桌面整理软件

桌面整理软件,桌面整理软件,桌面整理软件,桌面整理软件

2018-05-23

卡莱特播放软件

卡莱特播放软件,卡莱特播放软件,卡莱特播放软件,卡莱特播放软件

2018-05-23

摩西尔播放软件

摩西尔播放软件,摩西尔播放软件,摩西尔播放软件,摩西尔播放软件

2018-05-23

诺瓦整屏校正软件

诺瓦整屏校正软件。诺瓦整屏校正软件。诺瓦整屏校正软件

2018-05-23

智能连屏软件

灵星雨智能连屏软件,灵星雨智能连屏软件,灵星雨智能连屏软件,灵星雨智能连屏软件

2018-05-23

ps色环插件

PS色环插件,轻松配色,PS色环插件,轻松配色,PS色环插件,轻松配色

2018-05-21

C++_MFC_类数组

我们应该注意到,没有一个受过伦理教育的软件工程师会同意开发出“摧毁巴格达”的程序。然而基本的职业道德却可以要求他们开发出“摧毁城市”的程序,巴格达只是这个程序的一个参数。

2018-05-17

C++_MFC_进程、线程.

我们应该注意到,没有一个受过伦理教育的软件工程师会同意开发出“摧毁巴格达”的程序。然而基本的职业道德却可以要求他们开发出“摧毁城市”的程序,巴格达只是这个程序的一个参数。

2018-05-17

C++_MFC_对列

我们应该注意到,没有一个受过伦理教育的软件工程师会同意开发出“摧毁巴格达”的程序。然而基本的职业道德却可以要求他们开发出“摧毁城市”的程序,巴格达只是这个程序的一个参数。

2018-05-17

C++_MFC_拆分字符串

我们应该注意到,没有一个受过伦理教育的软件工程师会同意开发出“摧毁巴格达”的程序。然而基本的职业道德却可以要求他们开发出“摧毁城市”的程序,巴格达只是这个程序的一个参数。

2018-05-17

( C++_MFC_CString

我们应该注意到,没有一个受过伦理教育的软件工程师会同意开发出“摧毁巴格达”的程序。然而基本的职业道德却可以要求他们开发出“摧毁城市”的程序,巴格达只是这个程序的一个参数。

2018-05-17

C++_MFC_容器、标准库、模板.

我们应该注意到,没有一个受过伦理教育的软件工程师会同意开发出“摧毁巴格达”的程序。然而基本的职业道德却可以要求他们开发出“摧毁城市”的程序,巴格达只是这个程序的一个参数。

2018-05-17

C++_MFC_CFile

我们应该注意到,没有一个受过伦理教育的软件工程师会同意开发出“摧毁巴格达”的程序。然而基本的职业道德却可以要求他们开发出“摧毁城市”的程序,巴格达只是这个程序的一个参数。

2018-05-17

C# 计算行数

C#编程之路,了解自己的工作学习任务量,增加编程点的乐趣

2018-05-17

空空如也

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

TA关注的人

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