C++笔记-string(下)
这篇我们自己来简单实现一下string类中的各个接口,来帮助我们更好地理解string类接口的底层原理。
1.构造函数和析构函数
对于构造函数我们要写两种情况:空字符串和非空字符串
因为我们要自己实现string类,所以就不能用std命名空间,这里我们要自己创建一个命名空间,在里面实现string类。
我们之前也讲过string类底层就是一个数组,所以我们在实现时也按数组来实现,并定义数组中数据的大小和容量,就和我们实现顺序表一样。
这里面我先实现了c_str接口,因为我们现在是自定义类型,所以不能直接输出变量,所以实现c_str接口便于我们输出我们实现的字符串。
我们首先讲空字符串的情况:
这里可能有人会疑惑我为什么这样初始化?
可能觉得既然是空字符串,直接定义为null不就好了。我想大多数人的第一想法也是这样,但其实这样写是有问题的。
当我们初始化一个空字符串时,我们调用c_str接口时,返回值是char*类型,而此时字符串是空指针,乍一看没问题,感觉那就输出空指针嘛,没设么没问题啊。
但是char*这个类型比较特殊,它默认是当字符串输出的,所以它会解引用,此时就出问题了,对空指针解引用是很危险的事,所以不能初始化为null。
而字符串在底层保存时,其实会多开辟一块空间,来存储'\0',所以我们创建一个空间来存放'\0',_size和_capacity初始化为0即可。
下面讲非空字符串:
给一个默认空字符串也是为了调用但不传参数这种情况,而""这种在底层就是'\0'。
而是为了模拟真实的string类,所以我们创建空间时多创建一个空间来存放'\0'。
再把传入的参数拷贝到我们创建的空间即可。
最后是析构函数:
析构函数就和之前讲的一样,new出来的空间delete就行,再把_str置为null即可。
2.遍历字符串
在遍历字符串中我们要实现的就是size接口,[]符号重载以及迭代器的实现。
首先讲size:
这个就很简单,直接返回_size即可。
下面讲[]符号重载:
[]符号重载我们要实现两种,const类型和非const类型。
实现起来也简单,直接返回是相应位置的值即可。const类型和非const类型区别就是能否通过解引用来改变字符串的内容。
最后是迭代器的实现:
迭代器我们就只实现begin和end,并且每种都实现const类型和非const类型。
迭代器不一定是指针,但在这里实现时我们就用指针来实现,毕竟和指针的作用一样。
实现起来也简单,begin就是返回第一个元素的地址,end就是返回最后一个数据的下一个位置的地址。
3.修改字符串
修改字符串要实现的比较多,我就一个一个讲:
3.1reserve
reserve虽然能扩容也能缩容,但是缩容是分编译器的,并且实现起来较为麻烦,涉及当前未学的知识,所以这里我只实现扩容功能。
1.创建一个临时变量来接收我们扩容后的空间
2.讲当前数组的内容拷贝到新空间中
3.讲究空间销毁,并将_str指向新空间
4._capacity记录新的容量
3.2push_back
push_back就是尾插,注意的点就是要首先判断数组是否满了,满了就要扩容,最后在原_size的位置处插入数据,_size++,再将新_size位置置为'\0'。
3.3append
实现append时要先计算字符串的长度,并判断我们之前的扩容方式扩容后与_size+len谁更大,取更大的作为我们的扩容方式。
接下来就是把字符串拷贝进数组,这里我用memcpy进行拷贝,避免字符串中中间就含有'\0'导致拷贝终止。
注意:拷贝时要拷贝len+1个字符,所以最后一步可写可不写,或者拷贝len个字符,这样就要写上最后一步。
3.4+=运算符重载
实现了push_back和append后,实现+=运算符重载就简单了很多,唯一需要注意的就是我们要返回的是字符串本身,所以要注意返回值是string。
3.5insert
3.5.1插入一个字符
1.assert判断pos是否在有效范围内
2.判断是否需要扩容
3.因为底层数组,所以在中间位置插入一个数据就要将pos位置以后的数据全部向后移一位
4.将pos位置处的值置为要插入的数据
5._size++
至于为什么要把pos强转成int,这是因为我们这个循环的结束条件是i<pos,如果是其他位置当然没问题,但如果是头插那就有问题了。
当时头插时,i只有等于-1时循环才会停止,但是当i等于-1时会出现类型提升的现象,类型提升就是范围小的向范围大的提升,有符号的向无符号的提升,此时i就会向无符号整型提升,-1转为无符号整型是整形最大值,所以这个程序会死循环导致崩溃。
将参数中的pos改为int也能解决问题,但是在底层编译器在实现时用的都是无符号,所以为了保持一致,这里也就用无符号。
3.5.2插入一个字符串
1.assert判断pos是否在有效范围内
2.计算字符串的长度
2.判断是否需要扩容(这里扩容是和append一样的原则)
3.将pos位置以后的值全部向后移动len个位置
4.将字符串一个一个插入数组中,注意字符串的下标是i-pos
5._size+len
3.6erase
这里说明一下,在vs编译器下被const修饰的静态的整型变量是可以在类内定义的,也就是给缺省值,这是一种特殊情况。
因为在底层如果不传参数len,其实有个默认值就是npos,这个值其实是整型的最大值,但在定义时是-1。
1.assert判断pos是否在有效范围内
2.判断是删完还是只删一部分
3.只删一部分直接把pos位置处的值置为'\0',再将_size移到pos处,这样也算完成了删除
4.只删一部分,这里我用了memmove的方式将pos位置后面的值移到以pos为起始的位置处,其实和后面数据全部向前移len个位置是一样的,当然也可以用循环来实现。
5._size-=len
3.7find
3.7.1查找单个字符
查找单个字符相对简单,遍历整个字符串,找到对应字符就返回下标,没有找到就返回-1。
注意:在参数中有个pos,这个参数给个缺省值0,代表如果不传参数,就默认从下标为0的位置开始查找。
3.7.2查找一个字符串
查找一个字符串这里我使用strstr,这里用strstr来实现会更方便,如果查找成功strstr返回的是首个字符的地址,查找失败返回null。
这里如果查找失败就返回-1,查找成功就返回首个字符的下标。
注意:因为查找成功返回的是首个字符的地址,所以要想返回下标,就需要指针相减来得到。
3.8substr
substr作用就是得到某个区间的字符,所以参数也要给上缺省值。
1.定义空字符串m
2.判断len是否超出范围,超出范围按最大值算
3.提前扩容,提高效率
4.通过循环,将区间上的字符拷贝到m
5.返回m
3.9=符号重载
1.new一个临时空间,注意空间大小是_capacity+1,最后一个位置用来存放'\0'
2.调用memcpy函数将str中的数据拷贝过去
3.delete掉原先的_str,让_str指向新的空间tmp
4.返回*this
3.10<<符号重载
这是我们平常输出所用的符号,这个符号属于ostream流中的,所以参数我们也要用ostream类型。
这里解释一下为什么是两个参数:
这是我们输出时写的形式,可以看出在符号左边是ostream流中定义的变量cout,而参数右边是我们要输出的字符串,所以在实现<<时参数是这两个的原因,并且第一个参数要用引用,道理是和传值调用是一样的,这里就不过多赘述了。
而输出也很简单,遍历整个数组挨个将字符输出即可。
注意:在声明时可以不用把这个重载放在类中,如果要放在类中需要用到友元,这里我是在类外声明和定义的,所以不需要友元声明,并且我在ostream前加上std::是当前类中并没有展开std标准库,而ostream是在标准库中的,下面的<<符号重载也是如此。
3.11clear
clear因为下面>>符号重载需要用到,所以提前写一下。
clear就是将当前字符串清空,所以实现起来也相对简单:
直接将数组第一个位置赋值为'\0',再将_size和_capacity置为0即可。
3.12>>符号重载
1.清空字符串
2.利用get函数得到输入的每一字符
3.利用循环使str加上每一个输入的字符
注意:1.参数中的str此时不需要加const,因为要对str进行修改
2.解释一下这里为什么这里不用>>符号:
因为>>符号会自动掠过空格和换行符号,而我们输入字符的停止条件就是遇到空格或者换行字符,所以这里不能用>>符号,否则会一直输入不会停止
4.判断字符串
判断字符串就是判断字符串之间的大小情况,而这里实现<和==符号即可,剩下的符号用这两个即可实现。
4.1<符号
1.len1和len2来记录两个字符串的大小
2.i1和i2记录下标
3.以其中一个结束为循环条件,判断大小
4.最后返回的这个表达式是当两个字符串长度不相等时,前面都相等,最后跳出循环判断是true只有表达式这一种情况,其他都是false,所以直接返回这个表达式的结果即可
注意:循环条件是<而不是<=。
4.2==符号实现
前面和<符号实现基本相同,在循环中判断条件作出修改,如果相应位置字符不相等直接返回false。
跳出循环后,只有表达式这一种情况是true,其余情况都为false,所以直接返回表达式即可。
4.3<=符号实现
4.4>符号实现
4.5>=符号实现
4.6!=符号实现
实现了<和==符号后,剩下的符号实现起来就很简单。
这里可能有人会有疑惑:为社么不用strcmp或者memcpy来实现呢?
先解释strcmp:
一般情况下确实没什么问题,但我们要清楚strcmp遇到'\0'会停止,如果字符串中间含有'\0'呢?此时就会出问题,比较就会停止,所以不能用。
memcpy:
memcpy虽然解决了strcmp的问题,但是它面临两个字符串长度不一,到底是按大的走还是按小的走呢?不管按那个走都会面临越界访问的问题,所以不能用。
到最后还是我们得自己来实现。
以上就是string(下)的内容。
相关文章:
C++笔记-string(下)
这篇我们自己来简单实现一下string类中的各个接口,来帮助我们更好地理解string类接口的底层原理。 1.构造函数和析构函数 对于构造函数我们要写两种情况:空字符串和非空字符串 因为我们要自己实现string类,所以就不能用std命名空间…...
Android studio学习之路(六)--真机的调试以及多媒体照相的使用
多媒体应用(语言识别,照相,拍视频)在生活的各个方面都具有非常大的作用,所以接下来将会逐步介绍多媒体的使用,但是在使用多媒体之前,使用模拟器肯定是不行的,所以我们必须要使用真机…...
Airflow集成Lark机器人
🥭1. 实现目标 🕐 通过自定义函数,实现Lark机器人告警功能 🕐 通过Lark机器人代替邮件数据的发送功能 🥭2.自定义函数实现 from airflow import DAG from airflow.operators.python_operator import PythonOperator from airflow.models import Variable import requ…...
【电视软件】小飞电视v2.7.0 TV版-清爽无广告秒换台【永久更新】
软件介绍 小飞电视是一款电视端的直播软件,无需二次付费和登录,资源丰富,高清流畅。具备开机自启、推送功能、自定义直播源、个性化设置及节目预告等实用功能,为用户带来良好的观看体验。基于mytv开源项目二改,涵盖央…...
2025年- H1-Lc109-160. 相交列表--java版
1.题目描述 2.思路 “双指针切换链表头” 思路一:双指针路径对齐 while (pA ! pB) { pA (pA null) ? headB : pA.next; pB (pB null) ? headA : pB.next; } 让两个指针走相同的总路径长度! 设: 链表 A 独有部分长度是 lenA 链表 B …...
《大模型MCP服务协议与多智能体开发实战10讲》课程大纲
以下是针对大模型MCP(Model Context Protocol)服务协议的多智能体开发系列专栏的10节课课程设计,结合MCP协议特性与多智能体系统的前沿实践,课程结构从协议原理到工程落地,涵盖核心技术、实战案例与前沿趋势࿱…...
C++20 范围库:开启现代 C++ 编程的新篇章
文章目录 一、范围库的核心概念(一)范围(Range)(二)视图(View) 二、范围库的主要特性(一)范围工厂(二)范围适配器(三&…...
基于 Spring Boot 瑞吉外卖系统开发(二)
基于 Spring Boot 瑞吉外卖系统开发(二) 员工登录功能实现 员工登录页面login.html存放在/resources/backend/page/login目录下。 启动项目,在浏览器中通过地址“http://localhost:8080/backend/page/login/login.html”访问员工登录页面。…...
Matlab实现鼠群优化算法优化随机森林算法模型 (ROS-RF)(附源码)
目录 1.内容介绍 2.部分代码 3.实验结果 4.内容获取 1内容介绍 鼠群优化算法(Rat Swarm Optimizer, ROS)是一种基于老鼠觅食行为的新型元启发式优化算法。ROS通过模拟老鼠在寻找食物时的社会互动和群体智能来探索解空间,旨在高效地找到全局最…...
软件工程第四章习题
一、选择题 1.选择题 (1)在需求分析之前有必要进行( )工作。 A.程序设计 B.可行性研究 C. E-R 分析 D.行为建模 (2)需求分析是一个( ),它应该贯穿于系统的整个生命周期,而不是仅仅属于软件生 命周期早期的一…...
第十九:b+树和b-树
优点一: B树只有叶节点存放数据,其余节点用来索引,而B-树是每个索引节点都会有Data域。 优点二: B树所有的Data域在叶子节点,并且所有叶子节点之间都有一个链指针。 这样遍历叶子节点就能获得全部数据,这样…...
SQL Server查询性能下降:执行计划不稳定与索引优化
问题现象: SQL Server 2022 中某些关键查询性能突然下降,执行时间从毫秒级增至数秒,日志中未报错,但查询计划显示低效的索引扫描或键查找。 快速诊断 捕获实际执行计划: -- 启用实际执行计划 SET STATISTICS XML, TIME…...
python mcp server最佳实践
文章目录 1、使用fastmcp包还是mcp包?要不要使用uv创建虚拟环境?编写mcp server代码测试cline配置小Tip2、使用stdio还是sse?其实能做的选择不多: 1、使用fastmcp包还是mcp包? 2、使用stdio还是sse? 1、使用fastmcp包还是mcp包? 个人建议选择后者,因为大模型说,后者…...
STM32看门狗应用实战:独立看门狗与窗口看门狗深度解析(下) | 零基础入门STM32第九十五步
主题内容教学目的/扩展视频看门狗什么是看门狗,原理分析,启动喂狗方法,读标志位。熟悉在程序里用看门狗。 师从洋桃电子,杜洋老师 📑文章目录 一、看门狗应用架构分析1.1 系统监控流程图1.2 双看门狗应用场景对比 二、…...
操作符详解
1.操作符的分类 算数操作符: 、- 、 * 、 / 、 %移位操作符:>>、 <<位操作符:& 、| 、^ 赋值操作符:、、-、/、%、<<、>>、&、|、^单目操作符:!、、- -、&、*、、…...
LeetCode 第41~43题
目录 LeetCode 第41题:缺失的第一个正数 LeetCode 第42题:接雨水 LeetCode 第43题:字符串相乘 LeetCode 第41题:缺失的第一个正数 题目描述: 给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的…...
蓝桥杯web工作协调
在 JavaScript 里,Set 是一种内置对象,可存储任何类型的唯一值,无论是原始值还是对象引用。下面是 Set 集合常用方法的介绍: 1. 创建 Set 可以使用 new Set() 来创建一个空的 Set,或者传入一个可迭代对象来初始化 Se…...
夜神模拟器无法下载fiddler证书
提示信息: No root certificate was found. Have you enabled HTTPS traffic decryption in Fiddler yet? 在fiddler安装目录运行以下命令: makecert.exe -r -ss my -n "CNDO_NOT_TRUST_FiddlerRoot, ODO_NOT_TRUST, OUCreated by http://www.fidd…...
OpenCV阈值处理详解
文章目录 一、引言二、阈值处理的基本概念2.1 什么是阈值处理?2.2 为什么需要阈值处理? 三、OpenCV中的阈值处理方法3.1 基本阈值处理3.2 阈值类型详解1. 二进制阈值化 (cv2.THRESH_BINARY)2. 反二进制阈值化 (cv2.THRESH_BINARY_INV)3. 截断阈值化 (cv2…...
开源模型应用落地-Qwen2.5-Omni-7B模型-Gradio-部署 “光速” 指南(二)
一、前言 2025年3月,阿里巴巴通义千问团队开源的全模态大模型Qwen2.5-Omni-7B,犹如一记惊雷划破AI领域的长空。这个仅70亿参数的"小巧巨人",以端到端的架构实现了对文本、图像、音频、视频的全模态感知,更通过创新的Thinker-Talker双核架构,将人类"接收-思…...
【仪器仪表专题】案例:信号高电平到底是看顶端值还是最大值?
案例背景 本案例在于审查其他部门信号完整性测试报告中发现的一处有关RS232输入信号质量波形测试问题点。 首先发现测试报告中的RS232时序和信号质量测试中有一个NG项目,如下所示,可以看到T2IN的高电平要求是2.0V~3.6V之间,但是实测是3.8V,超过极限值,所以判定为NG。 …...
Git版本管理系列:(一)使用Git管理单分支
目录 基础概念介绍仓库的创建创建隐藏目录添加代码到暂存区提交代码到仓库提交记录查询比较差异标签文件删除版本回退总结 Git 是一个分布式版本控制系统(DVCS),用于跟踪文件的变更并协调多人协作开发,由 Linus Torvalds 于 2…...
Vue框架的响应式系统
以下是关于 响应式系统 的系统梳理: 一、响应式系统的核心目标 数据驱动视图:自动追踪数据变化并触发视图更新高效依赖追踪:精确识别数据与视图的依赖关系批量异步更新:优化多次数据变更的更新性能组件级更新:最小化DOM操作范围二、核心架构演进 版本核心技术优势局限性Vu…...
【Shell】模拟爬虫下载天龙八部小说
Shell脚本: #curl https://tianlong.5000yan.com/ -o tianlong.html grep "href" tianlong.html | grep html | awk -F"\"" { print $6 } >> urls.txt grep "href" tianlong.html | grep html | awk -F">"…...
WHAT - JavaScript 中 Object.defineProperty() 和 Proxy 对比
目录 一、Object.defineProperty()作用基本语法示例:定义一个只读属性示例:定义 getter/setter 二、Proxy作用基本语法示例:拦截属性访问 对比:defineProperty vs Proxy场景选择建议 在 JavaScript 中,Object.definePr…...
Qt进阶开发:模型/视图原理详解
文章目录 一、模型/视图架构概述二、模型/视图架构的组成部分2.1 模型2.2 视图2.3 委托三、模型类的介绍3.1 模型索引3.2 行和列3.3 父项4.项角色四、视图类的介绍4.1 基本概念4.2 处理项目选择五、委托类的介绍5.1 基本概念5.2 自定义委托六、数据-窗口映射器一、模型/视图架构…...
d202547
目录 一、sql-每月交易 I 二、 sql-按日期分组销售产品 三、sql-列出指定时间段内所有的下单产品 四、 第k个大的数 一、sql-每月交易 I 题目意思就是把国家名称,和年月一样的分为一组,在这组数据中进行计数 题目给的日期格式是yyyy-mm-ss,可以使用l…...
pulsar使用指南
Apache Pulsar 是 Apache 软件基金会顶级项目,是下一代云原生分布式消息流平台,集消息、存储、轻量化函数式计算为一体,采用计算与存储分离架构设计,支持多租户、持久化存储、多机房跨区域数据复制,具有强一致性、高吞…...
底盘---麦克纳姆轮(Mecanum Wheel)
一、基本定义与起源 定义:麦克纳姆轮是一种实现全向移动的特殊轮式结构,通过在主轮周边安装多个倾斜的辊子(小轮),使设备能够在平面上向任意方向移动(包括横向、斜向、旋转等),无需…...
内网文件传输新体验,聊天、传输、自定义,一应俱全
Flix 是一款高效、便捷的跨平台局域网文件传输工具,支持 Windows、macOS、Android、iOS 和 Linux 等多种操作系统。它以简洁直观的聊天式界面为特色,让用户能够像发送消息一样轻松地传输文件,无需复杂的设置或登录。Flix 支持大文件和多种格式…...
深入解析嵌入式Linux系统架构:从Bootloader到用户空间
B站视频链接,请多多关注本人B站: 📌 Yocto项目实战教程:第二章 视频讲解 目录 第2章 Linux系统架构 2.1 GNU/Linux2.2 Bootloader2.3 内核空间2.4 用户空间 总结 第2章 Linux系统架构 {#linux系统架构} 嵌入式Linux系统是Linux内核的精简版…...
一句话,十分钟,一部片!
大家好!我是羊仔,专注AI工具、智能体、编程。 羊仔最近发现一个超有意思的AI工具,简直是为内容创作者量身打造的!啥工具?Story-Flicks! 这玩意儿能干啥呢?简单来说,一句话…...
【橘子大模型】使用streamlit来构建自己的聊天机器人(下)
一、简介 我们之前完成了一个简易的聊天机器人,但是还留下了一些问题没有解决,比如如何开启新的会话。如何切换session_id,如何把对话做成流式的输出。这些我们就会在今天来完成。 二、关于新的会话和session_id from dotenv import load_…...
【合新通信】光纤延迟线(ODL)的原理
光纤延迟线是一种利用光学原理实现信号传输的设备,主要用于雷达、通信和测量等领域。以下是光纤延迟线的基本原理和工作方式: 技术原理 光纤延迟线通过相位控制器和分束器来处理输入信号。具体来说,数据信号和参考信号同时输入分束器&#x…...
Altium Designer——规则设置
规则 间距规则: 线宽:6mil > x > 4mil 1.在菜单栏中选择 设计 ——》 规则 根据下图双击对应的Clearance规则,更改红圈中的数字为6mil,然后点击应用再点击确定。 这个间距是元素之间(走线、铺铜、元器件&#x…...
智谛达科技:以创新为翼,翱翔AI人形机器人蓝海
在科技创新的浩瀚星空中,智谛达科技集团犹如一颗璀璨的明星,以其独特的创新光芒,照亮了AI人形机器人的广阔蓝海。这家在AI领域深耕多年的企业,始终秉持着创新为翼的发展理念,不断突破技术瓶颈,拓展应用场景,以卓越的实力和前瞻性的思维,引领着人形机器人行业的未来发展。 智谛达…...
前后端接口参数详解与 Mock 配置指南【大模型总结】
前后端接口参数详解与 Mock 配置指南 一、前端请求参数类型及 Mock 处理 1.1 URL 路径参数 (Path Parameters) 场景示例: GET /api/users/{userId}/orders/{orderId}Mock.js 处理: Mock.mock(/\/api\/users\/(\d)\/orders\/(\d)/, get, (options) &g…...
RPC与其他通信技术的区别,以及RPC的底层原理
1、什么是 RPC? 远程过程调用(RPC) 是一种协议,它允许程序在不同计算机之间进行通信,让开发者可以像调用本地函数一样发起远程请求。 通过 RPC,开发者无需关注底层网络细节,能够更专注于业务逻…...
汽车售后ODX 和 OTX 详细分析
在汽车售后诊断领域,ODX 和 OTX 都是重要的标准,但它们的应用场景和特点有所不同,难以简单地评判哪个是绝对的主流。以下是对它们的详细分析。 ODX(Open Diagnostic data eXchange) 概述:ODX 是由 ASAM 制…...
深度学习天崩开局
李沐大神的d2l包导入, 这玩意需要python311版本,我现在版本已经313了,作为一个天生要强的男人,我是坚决不向低版本低头的。 然后我就研究啊,各种翻资料啊,然后deepseek加豆包都翻烂了, 最终所…...
面试算法高频04-分治与回溯
分治与回溯 分治和回溯算法,包括其概念、特性、代码模板,并结合具体题目进行讲解,旨在帮助学员理解和掌握这两种算法的应用。 分治与回溯的概念 分治(Divide & Conquer):本质上基于递归,先…...
整数编码 - 华为OD统一考试(A卷、C++)
题目描述 实现一种整数编码方法,使得待编码的数字越小,编码后所占用的字节数越小。 编码规则如下: 编码时7位一组,每个字节的低7位用于存储待编码数字的补码。字节的最高位表示后续是否还有字节,置1表示后面还有更多的字节&…...
对访问者模式的理解
对访问者模式的理解 一、场景二、不采用访问者模式1、代码2、特点 三、采用访问者模式1、代码2、特点 四、思考 一、场景 我们有一个图形系统,系统中有多种图形对象(如圆形、方形等),每种图形对象都有不同的属性和行为。现在需要对…...
第三次PID状态机
以下是 apply_params 函数的实现步骤和代码示例: 1. 定义参数结构体 在头文件中定义 PID_Params 结构体,包含需要动态调整的 PID 参数: // ms_hal_photo_sensor.h typedef struct {float Kp; // 比例系数float Ki; // …...
如何在大型项目中有效使用TypeScript进行类型定义?
嗨,大家好,我是莫循,Typescript是JavaScript的超集,现在已经广泛用于前端开发,那么在项目中如何用好类型定义呢?以下是一些可以提供参考的案例实践。 一、类型组织策略 1. 模块化类型定义 按功能/模块划分…...
C4D XP 粒子动画云端渲染指南
在 C4D 动画制作领域,XP 粒子特效因其复杂的动力学计算常成为渲染瓶颈。传统本地渲染不仅耗时漫长,还需持续占用高配置硬件。而借助专业云渲染平台,创作者可突破物理限制,高效完成 XP 粒子动画的最终输出。 以渲染 101 平台为例&a…...
mysql知识总结 基础篇
Mysql知识总结 1. 执行一条sql语句 期间发生了什么?1. 如何查看mysql服务被多少个客户端链接了2. 空闲链接会一直闲置嘛?3. mysql的链接数量有限制嘛?4. 我们如何知道mysql要使用哪个索引5. 什么是覆盖索引 2. MySQL 一行记录是怎么存储的&am…...
基于条码数据生成校验密码的C++实现方案
前言 在医疗试剂、工业产品等需要严格追踪管理的领域,条码系统常被用于标识产品信息。本文将详细介绍4种用C实现的条码密码生成算法,这些算法可以根据条码前11位数据生成2位校验密码(第9、10位),用于数据校验或简单防…...
前端工具方法整理
文章目录 1.在数组中找到匹配项,然后创建新对象2.对象转JSON字符串3.JSON字符串转JSON对象4.有个响应式对象,然后想清空所有属性5.判断参数不为空6.格式化字符串7.解析数组内容用逗号拼接 1.在数组中找到匹配项,然后创建新对象 const modifi…...
[数据结构]图krusakl算法实现
目录 Kruskal算法 Kruskal算法 我们要在连通图中去找生成树 连通图:在无向图中,若从顶点v1到顶点v2有路径,则称顶点v1与顶点v2是连通的。如果图中任意一对顶点都是连通的,则称此图为连通图。 生成树:一个连通图的最小…...