- 博客(40)
- 收藏
- 关注
原创 链表的基本操作
初始时,r同L均指向头结点,每读入一个数据元素就申请一个新结点,将新结点插入尾及诶单后,r指向新结点。元素插入在链表尾部,就是从一个空表L开始,将新结点逐个插入到链表的尾部,尾指针r指向链表的尾结点。9.单链表的头插法就是把元素插入在链表头部,也叫做前插法。就是获取线性表L中的某个数据元素的内容,通过变量e返回。(3)从最后一个结点开始,依次将各结点插入到链表的前端。(2)生成新结点,将读入数据存放到新结点的数据域中。7.插入:在第i个结点前插入值为e的新结点。5.取单链表中第i个元素的内容。
2025-07-20 16:47:35
517
原创 数据结构-线性表的链式表示
链表基础摘要 链表是由结点组成的线性结构,每个结点包含数据域和指针域。单链表结点只有一个后继指针,双链表有前驱和后继两个指针,循环链表尾结点指向头结点形成环。头指针指向链表入口,头结点是首元结点前的辅助结点。单链表操作包括初始化(创建空表)和清空(释放所有结点内存)。使用LinkList类型定义可简化代码,直接表示链表指针类型。
2025-07-20 16:45:46
446
原创 数据结构-线性表顺序表示
本文介绍了线性表的基本操作和实现方式。主要内容包括:1. 线性表的基本操作定义,如初始化、销毁、插入、删除等;2. C++中动态内存分配的实现方法,包括一维和二维数组的new/delete使用;3. C++参数传递的三种方式:值传递、指针传递和引用传递;4. 顺序表的实现原理、基本操作及时间复杂度分析;5. 顺序表的优缺点:优点是随机访问高效、存储密度高,缺点是插入/删除效率低、存在固定容量问题。文章还对比了顺序表适用的场景和不适用场景,为数据结构的选择提供了参考依据。
2025-07-20 16:44:29
790
原创 暑期数据结构第一天
本文介绍了数据结构的基础概念,包括数据元素(数据基本单位)和数据对象(同类元素的集合),以及四种逻辑结构(线性、非线性)和四种存储结构(顺序、链接、索引、散列)。重点分析了算法时间复杂度:顺序结构O(1)、单循环O(n)、嵌套循环O(n²)、递归O(logn)和分治递归等不同情况下的计算方法。时间复杂度主要由嵌套最深层的语句频度决定,为评估算法效率提供了量化标准。
2025-07-04 22:08:51
888
1
原创 vector容器相关语法
本文详细介绍了C++中vector容器的常用操作,主要分为四大类:容量相关、元素访问、修改函数以及构造赋值。容量操作包括size()、capacity()、empty()、resize()和reserve(),用于管理内存空间;元素访问提供了operator[]、at()、front()、back()和data()等方法;修改函数涵盖push_back()、pop_back()、insert()、erase()、clear()和swap()等操作;构造赋值则包含初始化、assign()和operator=等
2025-06-18 16:42:07
288
原创 c++第九天 -- STL
文章摘要: 本文首先介绍了C++中IntArray类的实现,这是一个封装动态整型数组的类,支持append、insert、remove等基本操作。然后讨论了STL的五个核心组件:容器(包括序列容器和关联容器)、算法、迭代器、函数对象和适配器。重点分析了常用序列容器(vector、deque、list等)的特性及适用场景,并以示例代码展示了关联容器(set/map)和容器适配器(stack/queue)的使用方法。最后介绍了STL算法(如for_each、find、sort等)的基本用法,通过示例演示了如何结
2025-06-18 16:12:34
576
原创 c++第九天--模版
函数模板是C++中的泛型编程工具,通过template<class T>定义,允许用类型参数创建通用函数。编译器会根据调用参数类型生成具体函数实例,不会缩减程序体积但提高可维护性。实例化方式包括:1)隐式实例化-自动推断类型;2)显式实例化-强制指定类型(如add<double>(2.72,5))。模板支持重载和特化(如const char*处理),调用优先级为非模板函数>显式模板>隐式模板。典型应用包括数值运算、容器操作(append/insert/remove等),需
2025-06-16 21:50:00
271
原创 c++第八天-多态
摘要: C++多态实现需要三个条件:公有继承、派生类重写基类虚函数、基类指针/引用指向派生类对象。虚函数通过虚函数表实现动态绑定,在运行时确定调用哪个函数。虚析构函数确保派生类对象被正确释放。纯虚函数(=0)定义接口,包含纯虚函数的类为抽象类,不能实例化。override和final关键字分别用于明确虚函数重写和限制继承/重写。通过基类指针调用虚函数可实现运行时多态,而对象名调用则为静态绑定。
2025-06-16 21:18:29
553
原创 c++第8天--虚继承与多态
摘要: 本文讲解了C++中的虚继承和虚函数多态机制。虚继承通过"virtual"关键字解决多继承中的菱形继承问题,确保公共基类只保留一份成员,避免重复和二义性。虚函数通过virtual关键字实现多态,使基类指针/引用在调用时能够正确执行派生类的函数实现。多态的三要素包括继承关系、虚函数声明和基类指针/引用指向派生类对象。文中通过家具类和动物类的具体示例,分别演示了虚继承和虚函数多态的实际应用场景。
2025-06-14 09:35:15
349
原创 c++第七天 继承与派生2
本文主要讲解C++中派生类的构造函数与析构函数、成员重写及多继承的实现要点。派生类对象构造时先调用基类构造函数,再执行派生类构造;析构顺序相反。在成员重写方面,要求派生类函数与基类函数具有相同的函数名、参数列表和返回类型。多继承允许一个派生类继承多个基类,但要注意解决可能出现的二义性问题,可通过类名限定来明确调用哪个基类的成员函数。文中通过具体代码示例演示了这些概念的实际应用。
2025-06-09 15:33:50
514
原创 c++第七天--继承与派生
摘要:面向对象编程中的继承机制允许派生类继承基类的属性和方法,实现代码复用。C++提供三种继承方式:公有继承(保持访问权限)、保护继承(降为protected)和私有继承(降为private)。其中公有继承最常用,支持类型兼容性原则,允许派生类对象赋值给基类对象、基类指针指向派生类对象,以及基类引用绑定派生类对象。通过继承可以构建层次化的类结构,有效减少代码冗余,提高开发效率。
2025-06-09 12:42:30
594
原创 c++第七天--特殊运算符重载
本文介绍了C++中三种重要的运算符重载机制:类型转换函数、仿函数和智能指针。类型转换函数分为转换构造函数(将其他类型转换为当前类)和类型转换运算符(将类转换为其他类型),可通过explicit控制隐式转换。仿函数通过重载operator()使对象像函数一样调用,能够保持状态并携带附加信息。智能指针通过重载*和->运算符实现自动内存管理,采用引用计数机制避免内存泄漏。这三种技术通过运算符重载扩展了C++对象的行为,提升了代码的灵活性和安全性。
2025-06-09 11:09:20
1220
原创 c++第六天--特殊运算符的重载2
摘要:本文介绍了C++中关系运算符和下标运算符的重载方法。关系运算符重载包括成员函数和友元函数两种形式,需要遵循成对重载原则(如==与!=),并建议使用const引用优化参数传递。下标运算符重载通过返回引用实现数组式的读写访问,应包含越界检查功能。文中提供了学生类和日期类作为示例,演示了如何重载各类比较运算符和下标访问。特别强调,运算符重载应保持语义一致性,并注意返回类型和参数传递方式的优化。
2025-06-09 08:41:41
657
原创 c++第七天--特殊运算符的重载练习
2.定义一个 MyString 类,包含一个字符指针 char* str 和一个整数 length,用于存储字符串和字符串的长度。确保在赋值过程中不会出现运行时错误。1.定义复数类Complex,使得复数能够像实数一样用cin/cout输入和输出。(只能使用友元函数)
2025-06-05 20:56:13
338
原创 c++第六天--特殊运算符的重载
摘要:本文介绍了C++中三种常见的运算符重载方法。首先讲解了输入/输出运算符(<<和>>)的重载实现,以复数类Complex为例展示了友元函数的使用方式。其次详细说明了赋值运算符(=)的重载要点,通过Person类案例强调了指针成员管理中的"三法则"(析构函数、拷贝构造函数、赋值运算符)。最后解析了自增/自减运算符(++/--)的前置后置区别,指出前置应返回引用而后置必须返回值以避免悬垂引用。全文通过代码示例直观展示了各运算符重载的实现方法和注意事项。
2025-06-04 22:26:22
1051
原创 c++第6天--运算符重载
摘要:运算符重载允许自定义类对象使用基本运算符。通过定义operator+等特殊函数实现,分为成员函数重载(隐式this指针)和友元函数重载两种方式。重载需遵循规则:不改变运算符优先级和结合性、不创建新运算符、至少一个操作数为自定义类型。示例演示了复数类和点类的+、-、==运算符重载实现,展示了成员函数和友元函数的不同应用场景。重载增强了自定义类型的运算表达能力。
2025-06-04 20:53:37
292
原创 c++类与对象的修饰练习题
2.创建一个 Student 类来表示学生,该类有学生的姓名和成绩这两个私有成员变量。提供构造函数用于初始化学生的姓名和成绩,并且在每次创建新的 Student 对象时,让学生总数加 1。另外,提供一个静态成员函数来获取学生的总数。编写一个 main 函数来创建多个 Student 对象,并调用静态成员函数输出学生的总数。3、设计一个 Point 类来表示二维平面上的点,该类有两个私有成员变量分别表示点的 x 坐标和 y 坐标。提供构造函数用于初始化坐标,同时提供一个成员函数用于输出点的坐标。
2025-06-03 09:43:21
345
原创 c++第四天--类与对象的修饰
可以使用static修饰的成员函数,也就是静态成员函数,静态成员函数同样属于类,并非某个对象,它只能访问类的静态成员变量和其他静态成员函数,不能访问非静态成员,因为非静态成员依赖于具体的对象。破坏封装性:友元机制打破了类的封装性,使得类的私有成员可以被外部访问,降低了类的安全性和可维护性。提高灵活性:友元机制可以让某些外部函数或类直接访问类的私有成员,避免了通过公共接口访问的繁琐,提高了代码的灵活性和效率。const 是一个常量,意味着一旦被初始化,其值就不能再被修改,在面向对象的编程中,
2025-06-03 09:33:56
1105
原创 c++面向对象第4天---拷贝构造函数与深复制
文章摘要:本文探讨了C++中对象成员的构造函数、深复制与浅复制的区别及拷贝构造函数的实现。第一部分展示了含有对象成员(Date类)的Student类构造函数调用顺序,说明对象成员初始化需在初始化列表完成。第二部分通过Mystring类对比浅复制(仅复制指针地址)和深复制(分配新内存并复制内容)的区别,指出浅复制会导致内存重复释放问题。第三部分详细讲解了拷贝构造函数的实现要点,包括使用引用参数、深拷贝内存分配等。最后通过Person类案例,完整演示了包含指针成员和对象成员的类如何正确实现拷贝构造函数。
2025-06-01 10:21:59
1081
原创 c++第三天(对象与构造函数)
本文介绍了C++中面向对象编程的重要概念:this指针、构造函数和析构函数。this指针用于指向当前对象实例,通过示例展示了其在成员函数中的使用场景。构造函数重点讲解了默认构造、带参数构造、重载构造以及初始化列表的使用方法,并通过Point类示例演示不同构造方式。析构函数部分说明了其在资源释放中的作用,特别是对动态内存的管理。最后提供了三个实践练习:实现StringBuilder的链式调用、Time类的多形式构造以及DynamicArray类的动态内存管理,帮助巩固所学知识。这些核心概念对理解C++对象生命
2025-05-28 21:59:22
1207
原创 c++复习_第一天(引用+小众考点)
本文展示了C++中常用的输入输出格式化方法和函数类型。主要包括:1) 使用iomanip库进行数字格式控制(如hex、showbase、setw、setprecision等);2) 三种参数传递方式(值传递、地址传递、引用传递)的区别;3) 函数重载和默认参数的实现;4) 字符串处理(getline、length、front/back操作)。通过9个实例演示了格式化输出、表格对齐、精度设置、参数传递、面积计算等常见编程需求,涵盖了C++基础编程中的核心控制技巧。
2025-05-27 22:30:40
452
原创 c++复习(类型准换+动态数组+类与对象)
const_cast<>用于移除const对象的引用或指针具有的常量性质,可以去除const对引用和指针的限定,const_cast<>只能用于转换指针或引用。多态:指同一个方法在不同的对象上有不同的表现虽然都是 “计算面积” 这个方法,但在不同的图形对象上表现不同,这就是多态。类:就是把所有同类的对象集合起来抽象出共同的特征和行为,进而形成类,这里的抽象就是把不同的对象属性值去掉,指保留属性。类与对象的实例就是抽象与实例的关系,类是对对象的抽象,对象是类的实例。c++新增的有关于内存动态管理的运算符。
2025-05-27 22:19:09
1051
原创 vue3相关知识点
• let name = '张三',let age = 18,let tel = '13888888888',let address = '北京昌平区宏福苑·宏福科技园':这些变量是普通的 JavaScript 变量,它们。
2025-01-29 20:59:21
1102
原创 vue-有关于TS与路由器
title: vue(TS)+路由器date: 2025-01-28 12:00:00tags: - 前端categories: - 前端Vue3-第二部分这里是代码中出现TS的,后面是路由器现在先上代码,步步分析。常规出现,就是创建与引入// 引入createApp用于创建应用import {createApp} from 'vue'// 引入App根组件import App from './App.vue'createApp(App)
2025-01-29 20:57:43
1595
2
原创 webAPI -DOM 相关知识点总结(非常细)
自定义属性。在html5中推出来了专门的data-自定义属性在标签上一律是以data-开头在DOM对象上一律是以dataset对象方式获取<div data-id="1" data-spm="不知道">1
2025-01-29 20:56:11
1173
原创 CSS基础语法(全)
* 右侧内容宽度,减去左侧宽度及间距 *//* 子元素之间均匀分布 */<img src="https://via.placeholder.com/32" alt="图标">/* 每行 4 个,减去间距 */align-items: flex-start;/* 垂直方向居中 *//* 水平方向居中 *//* 添加 overflow 解决问题 *//* 使用 Flex 布局 *//* 使用 Flex 布局 *//* 高度根据内容自适应 *//* 高度根据内容自适应 *//* 自动换行 */
2025-01-24 15:11:51
1294
原创 html 大概的知识点
, ul 是无序列表, li 是列表条目有序列表<ol><li></li><li><dt></dt><dd></dd><dd></dd>
2025-01-22 23:06:31
1157
原创 promise封装AJAX请求
AJAX(Asynchronous JavaScript and XML)是一种在不重新加载整个页面的情况下,通过异步与服务器交换数据并更新网页的技术。Promise 是 JavaScript 中的一种异步编程解决方案,它代表了一个异步操作的最终完成(或失败)及其结果值的表示。简单来说,Promise 用来处理异步操作的结果,它的核心目的是解决回调地狱(callback hell)问题,并让代码更加简洁、易于维护。关键词:异步操作哈。
2025-01-21 14:53:15
822
原创 前端基础(HTML+CSS+JS)
前端技术栈关注的方面:美观,功能,安全,性能,无障碍,安全,体验前端边界:jsnode electron,react Native ,web RTC,webGL ,WebASSEMBLY。
2025-01-18 13:06:23
1058
原创 axios从入门到源码分析
本质上就是一个基于promise的http客户端,用于浏览器和Node.js环境。他主要用于向服务器发送http请求病接收响应。Axios 是一个流行的 JavaScript 库,用于发送 HTTP 请求并处理响应。它可以在浏览器端和 Node.js 环境中运行,常用于前端开发中的 API 请求。•支持的请求方法• GET:获取数据• POST:提交数据• PUT:更新数据• DELETE:删除数据•支持的功能• 自动将响应数据解析为 JSON 格式(如果响应是 JSON 格式)。
2025-01-18 13:04:13
1098
原创 day1-ES6学习基础语法
ES6,全称,是JavaScript语言的一个重要版本,对语言进行了许多重大改进和新增功能。ES6的引入极大地提升了JavaScript的可用性、可读性和开发效率是由 ECMA 国际标准化组织制定的脚本语言标准,是其最广泛的实现。ES6(ECMAScript 2015)是ECMAScript标准的第六个版本,于2015年正式发布。ES6引入了许多新特性,使得JavaScript在语法和功能上更加强大和灵活。# #什么是ECMASript?
2025-01-16 20:05:09
1253
1
原创 数据结构-链表 day 2
一般在算法里面都是采用的静态链表,动态链表单链表一般就是邻接表,包括存储树与图双链表一般是优化某些问题的一下是动态链表与静态链表之间的区别•• 静态链表通常是基于一个固定大小的数组来实现的。链表中的每个结点在数组中占据一个位置,通过数组下标来模拟指针的功能。• 每个结点除了存储数据外,还需要一个指向下一个结点的位置(数组的下标或索引)。• 静态链表的内存大小在编译时确定,不能动态扩展。•• 动态链表使用的是。• 动态链表的内存是按需分配的,因此可以随时扩展或收缩,内存使用效率较高。•。
2025-01-14 16:25:00
1090
原创 离散化与区间合并
首先大家最关注的问题就是什么时候用离散化 呢?为什么要用离散化?1)处理大范围的数据2)优化空间利用解决方案:通过离散化,将所有出现过的x,l,r进行排序并去重,映射到一个连续的较小整数范围内,优势:空间节省,提高缓存命中率。3)简化查询与更新。一般离散化就是要将稀疏数据映射到紧凑范围,这里就是解释:这样做就是为了确保每个唯一数值有唯一的索引,。,索引是连续且有序的。这样做,避免重复映射导致的错误,如果不进行去重,alls 可能出现很多相同的值,
2025-01-13 22:10:47
580
原创 双指针和位运算
若 x 的二进制是 bxxxx1000(其中 bxxxx 可以理解为前面的若干位),给定一个长度为 n 的整数序列,请找出最长的不包含重复的数的连续区间,输出它的长度。表示取得整数x的二进制表示中,从右边往左的第一个1以及其后全部0所组成的那部分数值。则 -x 的二进制会是其反码加 1,即再一次把相同位置的最低位 1 提取出来。共一行,包含一个整数,表示最长的不包含重复的数的连续区间的长度。x & (-x). 这个地方着重理解,非常不错的一个点啊!假设我有一个数,我要求其二进制1的个数是多少。
2025-01-13 15:50:06
522
原创 小米静态页面-心得
在css中,black-nav a 只需要针对a标签通义设置样式,无需额外限制层级结构,其实也可以加Li,但是如果只写a的话,选择器更短更容易读,只有在明确需要限制a必须是li的后代时,才需要li,在水平布局中,将margin设置为auto可以将元素居中,总之,auto是一种默认值,表示将浏览器自动处理,常用于布局,对齐,内容溢出。8,li a是一种后代选择器,表示a标签必须是li标签的后代,可以是直接子代,也可以是嵌套更深的自带,例如 有两个存在。,如果有图像被掩盖的话,这个代码表示防止被覆盖。
2025-01-12 10:36:57
303
原创 史上最全快排总结
前面两者都是用递归实现的,但是要明白快速排序是先移动右指针再移动左指针的,顺序是有讲究的,然而这里并没有按这个区分,先移动左指针的顺序的原因是基准值的优化和对称逻辑设计使得左右指针顺序不重要。,这样右指针更容易 找到基准值小的元素,便于第一次交换。这个就是涉及先移动右指针再左指针了。这是一个带库函数的快速排序,明显是简单不少吧。通常会把最左侧的作为基准值。那么在实现先移动左指针。
2025-01-11 10:42:12
310
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅