- 博客(60)
- 收藏
- 关注
原创 Mysql(5)--表的约束
反过来,站在mysql的视角,凡是插入进来的数据,都是符合数据约束的。**主键:**primary key用来唯一的约束该字段里面的数据,不能重复,不能为空,一张表中最多只能有一个主键(但不意味着一个表中的主键只能添加给一列!在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。:当对应的字段,不给值,会自动的被系统触发,系统会从当前字段中已经有的最大值+1操作,得到一个新的不同的值。
2026-05-29 15:27:44
233
原创 Mysql(4)--数据类型
当我们的表的编码是utf8时,varchar(n)的参数n最大值是65532/3=21844[因为utf中,一个字符占用3个字节],如果编码是gbk,varchar(n)的参数n最大是65532/2=32766(因为gbk中,一个字符占用2字节)而且出于效率考虑,这些值实际存储的是“数字”,因为这些选项的每个选项值依次对应如下数字:1,2,4,8,16,32,…反过来我们已经有数据插入,插入的一定是合法的;char(L): 固定长度字符串,L是可以存储的长度,单位为字符,最大长度值可以为255。
2026-05-27 17:29:20
366
原创 岛屿的最大面积(BFS)
题目连接:https://leetcode.cn/problems/max-area-of-island/description/
2026-05-26 17:43:38
36
原创 Mysql(3)--表操作
--- 查看表的详细信息,显示创建表的语句。) character set 字符集 collate 校验规则 engine 存储引擎;name xingming varchar(60) DEFAULT NULL–修改列名称。character set 字符集,如果没有指定字符集,则以所在数据库的字符集为准。collate 校验规则,如果没有指定校验规则,则以所在数据库的校验规则为准。–新增列,在birthday后面新增image_path列。– 查看指定表的字段信息。
2026-05-26 17:21:32
217
原创 Mysql(2)--库操作
示例:mysqldump -P3306 -u root -p123456 -B mytest > D:/mytest.sql。备份:mysqldump -P3306 -u root -p 密码 -B 数据库名 > 数据库备份存储的文件路径。-----本质就是在/var/lib/mysql 创建一个目录。2.数据库校验集 – 支持数据库,进行字段比较使用的编码,半只也是一种读取数据库中数据的采用的编码格式。-----本质就是删除目录。1.数据库编码集 – 数据库未来存储数据。创建数据库时设置编码集和校验集。
2026-05-26 16:15:46
180
原创 Mysql(1)
一般的文件确实提供了数据的存储功能,但是文件并没有提供非常好的数据管理能力。数据库本质是对数据内容存储的一套解决方案,给数据库字段或要求,数据库直接给结果。样例:使用mysql建立一个 数据库 建立一张表结构,插入一些数据–对比一下mysql在Linux中是如何表现的。mysql的配置文件: /etc/mysql/mysql.conf.d/mysqld.cnf。一般指的是,在磁盘或者内存中存储的特定结构组织的数据 —将来在磁盘上存储的一套数据库方案。mysql是一套给我提供数据存取的服务的网络程序。
2026-05-25 17:33:41
237
原创 C++基础(4)
在C++中,使用关键字inline可以声明一个内联函数。声明为内联函数的函数会在编译时被视为候选项,编译器会尝试将其展开,将函数体直接插入到调用点处。这样就可以避免函数调用的开销,减少了函数调用的栈帧等额外开销,从而提高程序的执行效率内联函数是在编译时展开,而宏在编译预处理时展开;在编译的时候,内联函数直接被嵌入到目标代码中去,而宏只是一个简单的文本替换内联函数是真正的函数,和普通函数调用的方法一样,在调用点处直接展开,避免了函数的参数压栈操作,减少了调用的开销。
2026-03-23 11:38:42
364
原创 C++基础(3)
作用const修饰成员变量,定义成const常量,相较于宏常量,可进行类型检查,节省内存空间,提高了效率const修饰函数参数,使得传递过来的函数参数的值不能改变。const修饰成员函数,使得成员函数不能修改任何类型的成员变量(mutable修饰的变量除外),也不能调用非成员函数,因为非const成员函数可能会修改成员变量在类中的用法:const成员变量只能在类内生命、定义,在构造函数初始化列表中初始化。
2026-03-19 11:23:51
341
原创 C++基础(2)
如果在头文件中定义全局变量,当该头文件被多个文件include时,该头文件中的全局变量就会被定义多次,导致重复定义,因此不能在头文件中定义全局变量。
2026-03-18 11:18:57
336
原创 排序数组(快排)
本文提出了一种改进的快速排序算法来解决LeetCode排序数组问题。针对官方题解超时的问题,采用随机选取基准值(key)的方法,并结合三路划分思想:将数组分为小于key、等于key和大于key三部分。这种优化有效处理了大量重复元素的情况,避免传统快排划分不均匀导致的性能下降。算法实现中,通过随机选取基准值确保平均性能,使用三指针技术高效完成分区。时间复杂度为O(nlogn),空间复杂度为O(logn)的递归栈空间,适用于包含重复元素的大规模数据排序。
2026-03-04 15:45:00
39
原创 HTTP协议
HTTP协议是客户端与服务器通信的基础协议,用于传输超文本内容。URL即网址,是访问资源的地址标识。HTTP请求由首行(方法+URL+版本)、Header(键值对属性)和Body(可选内容)组成。响应同样包含首行(版本+状态码)、Header和Body。状态码表示请求处理结果,如200成功、404未找到等。协议通过Content-Length标识Body长度,HTML页面内容通常存放在Body中。
2026-03-02 17:44:40
100
原创 C++继承(2)
本文介绍了C++继承中的类型转换和作用域规则。在类型转换方面,派生类对象可以赋值给基类指针/引用(切片操作),但基类对象不能直接赋值给派生类对象,需通过强制类型转换实现。在作用域方面,派生类和基类具有独立作用域,派生类同名成员会隐藏基类成员,可通过基类作用域显式访问。文章通过代码示例展示了这些规则的具体应用,并建议避免在继承体系中定义同名成员以减少混淆。
2025-08-17 16:00:00
374
原创 C++继承(1)
本文摘要:面向对象程序设计中,继承机制实现了代码复用,允许在基类基础上扩展功能形成派生类。文章通过Student和Teacher类继承Person类的示例,展示了继承减少代码冗余的优势。详细介绍了继承定义格式、基类成员访问方式的变化规则(public>protected>private),强调实际开发中推荐使用public继承。最后演示了类模板的继承应用,指出基类为模板时需指定类域以避免编译错误。继承体现了由简单到复杂的层次结构,是面向对象设计的重要特性。
2025-08-16 14:00:00
349
原创 C++priority_queue
本文介绍了C++中的优先队列(priority_queue)容器。优先队列是一种基于堆结构实现的容器适配器,默认情况下是大顶堆,支持快速访问和删除最大元素。文章详细说明了优先队列的特性、底层实现原理(默认使用vector容器)以及常用操作(push、pop、top等)。同时通过代码示例演示了如何创建大顶堆和小顶堆,以及如何在自定义类型中使用优先队列(需重载比较运算符)。最后给出了一个实际应用案例:使用优先队列解决"数组中第K个大的元素"问题,展示了优先队列在算法中的典型用法。
2025-08-15 17:00:00
470
原创 C++queue
本文介绍了队列(queue)的基本概念和使用方法。队列是一种遵循先进先出(FIFO)原则的容器适配器,元素从队尾入队,队首出队。文档说明了队列的底层容器要求,默认使用deque实现,也支持list等容器。文章提供了队列的基本操作接口说明,包括push、pop、front、back等常用方法,并通过示例代码展示了如何用list模拟实现队列的功能。最后还提到了队列在算法题中的应用,如用队列实现栈。
2025-08-14 17:30:00
465
原创 C++stcack
本文介绍了C++中stack和queue的基本概念与使用方法。stack是一种后进先出(LIFO)的容器适配器,支持push、pop、top等操作。queue则是先进先出(FIFO)的容器适配器,支持push、pop、front等操作。文章通过代码示例展示了如何实现最小栈、验证栈的弹出序列、计算逆波兰表达式以及用两个栈实现队列等功能。最后还给出了stack的模拟实现方式,通过vector容器来构建stack的基本接口。这些内容为理解和应用C++标准库中的stack和queue提供了实践基础。
2025-08-13 16:15:00
336
原创 C++list(2)
本文首先介绍了如何模拟实现STL中的list容器,重点讲解了反向迭代器的实现原理,通过封装正向迭代器实现反向操作。其次对比了list和vector两种容器的特性差异:vector基于动态数组,支持随机访问但插入删除效率低;list基于双向链表,插入删除高效但不支持随机访问。文章从底层结构、迭代器特性、空间利用率和适用场景等方面进行了详细比较,为开发者选择合适的容器提供了参考依据。
2025-08-12 18:30:00
422
原创 C++list(1)
本文介绍了C++ STL中的list容器及其使用方法。list是一个双向链表,支持高效的插入和删除操作。文章详细列出了list的常用接口,包括构造函数、迭代器、容量查询、元素访问和修改操作等。重点讲解了迭代器的使用方式,包括正向/反向迭代器,并特别强调了迭代器失效问题:删除操作会导致指向被删除节点的迭代器失效,而其他迭代器不受影响。文章还通过代码示例展示了如何正确使用erase操作以避免迭代器失效问题。掌握这些基础操作后,可以进一步研究list的底层实现原理。
2025-08-11 16:26:41
472
原创 C++vector(2)
本文深入剖析了vector的实现原理及使用注意事项。首先介绍了vector的模拟实现框架,重点分析了使用memcpy拷贝可能导致的问题:当涉及资源管理的自定义类型时,memcpy的浅拷贝特性会导致内存泄漏或程序崩溃。随后通过杨辉三角示例展示了动态二维数组的实现方式,详细说明了vector<vector<int>>的结构特点,即外层vector存储内层vector对象,内层vector通过resize填充元素。文章通过图解方式直观展示了二维数组的内存布局变化过程。
2025-07-24 18:15:00
713
原创 C++vector(1)
本文介绍了C++ STL中vector容器的基本使用方法和注意事项。主要内容包括:1)vector的四种构造函数定义方式;2)迭代器(begin/end)和反向迭代器(rbegin/rend)的使用;3)空间管理相关接口(size/capacity/resize/reserve)及其在不同平台下的扩容机制差异;4)常用增删查改操作(push_back/pop_back/insert/erase等);5)重点强调了迭代器失效问题,详细分析了导致失效的两种场景:容器扩容和元素删除操作,并给出了相应的解决方案。文
2025-07-23 14:14:06
674
原创 C++string类(4)
本文介绍了C++中string类的实现,重点讨论了浅拷贝和深拷贝问题。浅拷贝会导致多个对象共享同一内存空间,引发重复释放的问题;而深拷贝则为每个对象分配独立的内存空间。文章展示了传统版和现代版两种string类实现方式:传统版通过显式分配内存和复制数据实现深拷贝;现代版利用临时对象和swap函数简化代码,提升效率。两者都通过重载拷贝构造函数和赋值运算符解决浅拷贝问题,确保对象间操作互不影响。现代版实现更简洁,推荐使用swap方法实现赋值运算符重载。
2025-07-21 18:30:00
356
原创 C++string类(3)
本文介绍了5个常见的字符串处理算法题解,包括:1.反转字母(双指针交换字母字符);2.查找第一个唯一字符(使用哈希表统计字符次数);3.计算最后一个单词长度(反向查找空格位置);4.验证回文字符串(忽略非字母数字字符);5.字符串相加(模拟竖式加法,处理进位)。每个题目都给出了C++实现代码,并采用了高效的处理方法,如双指针、哈希统计、反向遍历等技巧。这些题目涵盖了字符串处理中的常见操作,适合编程练习和算法学习。
2025-07-20 17:15:00
160
原创 C++string类(2)
本文介绍了C++中string类的常用操作及底层实现原理。主要内容包括:1)string对象的访问和遍历方法,如[]操作符、迭代器、范围for循环等;2)修改操作如push_back、append、find等函数;3)非成员函数如输入输出运算符重载;4)VS和g++编译器下string结构的差异,VS采用小字符串优化占28字节,g++使用写时拷贝仅占4字节。文章通过代码示例演示了各种string操作的使用方法,并比较了不同编译器下string实现的存储优化策略。
2025-07-19 18:00:00
1836
原创 C++string类(1)
本文介绍了C++中的string类及其常用操作。首先对比了C语言处理字符串的不足:需要手动管理内存且不符合OOP思想。随后详细讲解了string类的特性,包括auto关键字和范围for循环等C++11新特性,重点介绍了string类的构造方法(空字符串构造、C字符串构造、拷贝构造)和常用接口(size/length、capacity、empty、clear、reserve、resize等)。这些接口能有效简化字符串操作,提升开发效率。通过示例代码演示了如何正确使用这些功能,为C++字符串处理提供了实用指南。
2025-07-18 15:04:27
773
原创 C++模板初阶
本文介绍了C++模板编程的基础知识,主要包含函数模板和类模板两部分内容。函数模板通过template关键字定义,允许编写与类型无关的通用代码,编译器会根据实际参数类型自动生成具体函数。类模板同样使用template定义,实例化时需要显式指定类型参数。相比于函数重载,模板提高了代码复用率,但需要注意模板参数匹配规则和实例化方式(隐式和显式)。文章通过交换函数和栈类示例展示了模板的实际应用,并对比了模板与普通函数的调用优先级差异。
2025-07-16 17:30:00
852
原创 C++内存管理2
本文摘要: 动态内存管理:介绍operator new和operator delete的底层实现,前者通过malloc申请内存并在失败时抛出异常,后者通过free释放内存。 实现原理:对于内置类型,new/delete与malloc/free类似;对于自定义类型,new会调用构造函数,delete会调用析构函数。 定位new表达式:在已分配内存上显式调用构造函数初始化对象,常用于内存池场景。 关键区别:malloc/free是函数且不初始化,new/delete是操作符并自动调用构造/析构函数,new类型安
2025-07-15 19:30:00
343
原创 C++内存管理1
本文介绍了C/C++内存管理相关内容。首先分析了C/C++程序的内存分布,包括栈、堆、数据段和代码段,并通过代码示例展示了不同变量在内存中的存储位置。其次比较了C语言的动态内存管理方式(malloc/calloc/realloc/free)与C++的new/delete操作符的区别。重点指出new/delete对于自定义类型会自动调用构造函数和析构函数,而malloc/free则不会。文章还强调了内存分配和释放的匹配使用原则,对于单个元素使用new/delete,对于数组使用new[]/delete[]。通
2025-07-14 17:00:00
174
原创 C++类和对象(下)2
摘要:本文介绍了C++中的友元机制、内部类、匿名对象及编译器优化技术。友元允许外部函数或类访问类的私有成员,但会破坏封装性;内部类是定义在另一个类中的独立类,默认作为外部类的友元;匿名对象用于临时使用场景,生命周期仅限当前行;编译器会优化对象拷贝过程以减少不必要的构造和拷贝。示例代码展示了这些特性的具体应用和优化效果。(149字)
2025-07-13 18:30:00
428
原创 C++类和对象(下)1
C++构造函数初始化列表与类型转换机制研究摘要 本文探讨了C++构造函数初始化列表的机制与特性,分析了类类型转换的实现原理。研究表明:1)初始化列表是成员变量定义初始化的关键位置,引用、const成员等必须在此初始化;2)C++11支持声明时提供缺省值,但静态成员变量仍需类外初始化;3)类类型转换需依赖相应构造函数,explicit可禁止隐式转换;4)静态成员函数无this指针,只能访问静态成员。实验验证了初始化列表的执行顺序与声明顺序相关,与书写顺序无关。研究为C++对象初始化机制提供了系统性分析,对理解
2025-07-12 16:41:02
263
原创 C++类和对象(中)3
本文介绍了C++运算符重载的相关概念和应用。主要内容包括: 运算符重载的基本规则:必须是类类型参数、不能改变内置运算符含义、需保持原优先级和结合性。特别指出5个不可重载的运算符(.* :: sizeof ?: .)。 赋值运算符重载的特点:必须为成员函数、建议返回引用、默认实现进行浅拷贝,对于资源管理类需要实现深拷贝。 特殊运算符重载:区分前置++和后置++的实现方式,以及输入输出运算符需重载为全局函数。 介绍了const成员函数的作用,以及取地址运算符重载的两种形式(普通和const版本),通常使用编译器
2025-07-10 14:30:00
1451
原创 C++类和对象(中)2
摘要: 本文详细介绍了C++中的析构函数和拷贝构造函数。析构函数用于对象销毁时的资源清理,具有自动调用特性,其名称在类名前加~,无需参数和返回值。对于资源管理类(如Stack)必须显式定义析构函数,而简单类(如Date)可依赖编译器生成的默认析构函数。拷贝构造函数是构造函数的特殊形式,用于对象拷贝,其首参数必须是同类对象的引用以避免无限递归。编译器生成的拷贝构造函数对内置类型浅拷贝,对自定义类型调用其拷贝构造。资源管理类需实现深拷贝(如Stack),而仅含自定义成员的类(如MyQueue)可依赖默认拷贝构造
2025-07-09 19:00:00
581
原创 C++类和对象(中)1
本文介绍了C++类的默认成员函数,重点讲解了构造函数的概念与特性。默认成员函数包括6个基本函数,其中构造函数最为重要。构造函数在对象实例化时自动调用,用于初始化对象,具有名称与类相同、无返回值、可重载等特点。若用户未显式定义,编译器会生成默认构造函数,但对内置类型成员的初始化不确定。无参构造、全缺省构造和编译器生成的构造都称为默认构造函数,三者只能存在其一。文章通过Date类和Stack类的代码示例,展示了构造函数的实际应用场景和使用注意事项。
2025-07-08 15:15:00
691
原创 C++类和对象(上)2
本文介绍了C++类实例化和this指针的核心概念。类实例化是将类模板转化为具体对象的过程,如同用建筑设计图建造房屋,类只定义成员变量声明,实例化时才分配内存空间。对象大小由成员变量决定,遵循内存对齐规则。this指针是编译器自动添加的隐含参数,指向当前对象,用于区分不同对象调用同一成员函数时的数据访问。通过代码示例展示了this指针在成员函数中的隐式使用机制,以及对象内存分配的底层原理。这些概念是理解C++面向对象编程的基础。
2025-07-07 17:00:34
1871
原创 C++类和对象(上)1
本文介绍了C++中类的定义与基本特性。主要内容包括:1) 类定义格式,包含成员变量和成员函数,强调类定义末尾需加分号;2)访问限定符(public/protected/private)的作用及默认规则,class默认为private,struct默认为public;3)类域的概念,指出成员函数在类外定义时需使用作用域运算符指定所属类。文中通过栈类示例展示了成员变量命名惯例、类的封装性体现,以及与C结构体的区别。这些基础知识是理解C++面向对象编程的关键要素。
2025-07-06 19:00:00
77
原创 C++基础3
C++中的inline关键字用于定义内联函数,编译器可能将其在调用处展开以提高效率,但具体展开与否取决于编译器。inline适用于短小频繁调用的函数,但不适用于递归或较长函数。与C的宏函数相比,inline更安全且易于调试。注意inline函数的声明和定义不应分离,否则可能导致链接错误。此外,文章还讨论了NULL与nullptr的区别,指出C++11引入的nullptr能更好地解决指针类型转换问题,避免调用歧义。通过代码示例展示了inline函数的使用、宏函数的常见问题以及nullptr的实际应用
2025-07-05 18:15:00
287
原创 C++基础2
C++引用是变量的别名,与引用对象共享内存空间,主要用于传参和返回值优化。引用特性包括必须初始化、不可更改指向对象、支持多别名。与指针相比,引用更安全但灵活性较低。const引用可避免权限放大问题,适用于临时对象和类型转换场景。引用在数据结构中常替代指针简化代码,但需注意其与指针的本质区别:引用不开空间、必须初始化、不可改指向。两者各有优势,实践中需结合使用。
2025-07-04 16:00:00
392
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅