当前位置: 首页 > news >正文

手撕string

目录

引言

1,成员变量

2,先建一个可以跑的

2_1,构造函数

2_2, 扩容函数reserve

2_3,push_back

2_4,append[ ]

2_5,operator << 

2_6,测试一下,看猪跑

3,默认成员函数

3_1,拷贝构造函数

3_2, 赋值运算符重载

3_3,析构函数

4,string 里的便利操作

4_1,operator[ ]

4_2,operator +=

4_3,迭代器 iterator/const_iterator + begin() / end()

4_4,测试一下

5,完善功能

5_1,Member constants : npos

5_2,find

5_3,substr

5_4,insert

5_5,erase

5_6,resize

5_7,测试一下

6,信息获取功能一锅端

6_1,size

6_2,capacity

6_3,c_str

6_4,empty

6_5,clear

7,string 比较一锅端

8,operator >>  输入

补充说明

string 里的隐式类型的转换

不足

结束语

革命尚未成功,同志仍须努力


引言

前面已经学习了c++的基础知识,这一期就带领大家来手撕string。废话不多说,现在就开始吧。

1,成员变量

一个类最主要的部分莫过于成员变量了,那该怎么设计类string的成员变量勒?

string是对字符类型有着非常便捷的一系列操作的类,所以我们用 char* _str 来作为第一个成员变量,通过对其进行扩容等一系列操作,就可以非常灵活的控制其大小,不会浪费空间的同时也可以灵活变通可大可小,说到扩容,那就必然少不了int _size,  int _capacity 俩件套。

这里解释一下为什么要在成员变量前加 “ _ ",仅仅是为成员变量加上一个” 身份标签 “,使我们在其他场合下能够区分成员变量,当然哈,在成员变量前加 “ _ "是我的习惯,在后面加也是可以的。

2,先建一个可以跑的

2_1,构造函数

在使用过程中,我们通常是用一个字符或者一个字符串来定义string的对象。

那么我们可以把参数设置成一个字符串,并给出一个缺省值空串。根据咱们传的参数给_str进行相对应的扩容(用new即可),然后再把参数的内容拷贝到 _str 里就 ok 了。

2_2, 扩容函数reserve

在后续添加字符的时候扩容是少不了的,接下来就来实现  reserve  函数。参数给定一个 len,reserve 将其_capacity 扩大到  len。

那再扩容函数里面是不是要用 realloc 呢?realloc 分为原地扩容和异地扩容,咱们都到c++了,咱们就用 new。

开好空间后将_str 的数据拷贝过去,delete[ ] 掉_str 原有的数据,再把其赋值给 _str。

2_3,push_back

尾插一个字符,先判断是否需要扩容,再尾插,记得_size++ 和 ' \0 '

2_4,append[ ]

追加一个字符串,先判断是否需要扩容,再追加,记得_size++ 和 ' \0 '

2_5,operator << 

目前咱们有了构造函数,有了添加操作,再来一个打印函数,咱们就可以看见猪跑了。

但是勒,这个 operator << 不能放在类里面,因为operator << 的左操作数会被 this 侵占。所以我们定义到类外面,再使用友元进行访问,

2_6,测试一下,看猪跑

从打印的结果上来看,目前咱们的代码是没有太大问题的

3,默认成员函数

3_1,拷贝构造函数

3_2, 赋值运算符重载

这里给大家介绍两种写法

3_3,析构函数

4,string 里的便利操作

4_1,operator[ ]

在字符串/字符数组中,[ ] 用着贼香,string 也应该有一个,咱们就来重载一个

要注意哈 访问一个, 修改一个

4_2,operator +=

虽然前面有了 push_back 和 append 但是频繁调用也很麻烦, += 应运而生,但是勒,咋没没有必要再写一遍,我们再 operator += () 里面调用 push_back 或者 append 函数即可,增加代码的复用性。

4_3,迭代器 iterator/const_iterator + begin() / end()

这里的迭代器本质就是 char* / const char* 啦,直接typedef一下。

有了迭代器,咱们就可以使用范围 for ,上面的 operator << 就可进行改善啦

4_4,测试一下

从打印的结果上来看,目前咱们的代码是没有太大问题的

5,完善功能

5_1,Member constants : npos

类外面进行初始化

使用过  string::find  的都知道,当没有找到的时候返回的是 npos 那么npos 是什么呢?

其实 npos 是一个公共静态成员变量(一般是 size_t 类型),表示该类型的最大值,主要作用是,查找操作的失败标记,或者是表示字符串末尾。在类外使用的时候要带上域作用限定符。

5_2,find

可以借助<string.h> 中的 strstr 函数帮助我们查询,但是要注意 strstr 找到返回的是指针,没找到返回NULL.

我们可以根据返回的指针和  begin( ) 做减法,就可以得到下标啦

5_3,substr

5_4,insert

在数据挪动的时候特别容易出错,一定要注意。

5_5,erase

在数据挪动的时候特别容易出错,一定要注意。

5_6,resize

resize的功能我们来复习一下,主要功能: 改变 _size 。

传入一个数 n 和 一个字符 c

如果 n <= _size ,就缩小size 并将多余的数据删除

如果 n > _size,就增加 _size 并 初始化

5_7,测试一下

ok的呀

6,信息获取功能一锅端

这些都比较简单直接上代码

6_1,size

6_2,capacity

6_3,c_str

6_4,empty

6_5,clear

7,string 比较一锅端

字符串的比较是按照字典序来比较的

一定要注意啊,比较咱们是不能用 strcmp 的,因为 strcmp 遇见 ' \0 ' 就停止了,而string 的对象中间可能会夹杂着 ' \0 ';

有了俩个之后,后面就不用写了,直接复用就ok了


8,operator >>  输入

输入就比输出麻烦太大了,输入了,咱们要先清空要输入的对象里面的原始数据,也需要解决前导空格的问题,而且还要保证效率......

istream& operator>>(istream& in, ssy::string& s)
{s.clear();  //输入,会对之前的数据进行删除char ch = in.get();//跳过前导无用的空格while (ch == ' ' || ch == '\n'){ch = in.get();}char buff[128];int i = 0;while (ch != ' ' && ch != '\n'){buff[i++] = ch;   //为了防止扩容太频繁,借助buff数组if (i == 127){buff[i] = '\0';s += buff;i = 0;}ch = in.get();}if (i != 0){buff[i] = '\0';s += buff;}return in;
}

输入测试:

补充说明

string 里的隐式类型的转换

在 append / push_back 我们分别写出了尾插一个字符/字符串。

而在插入 insert 和 find 函数里面我们没有去区分 单个字符和字符串,因为无论我们传参传的是单个字符还是一个字符串,单参数的构造函数支持隐式类型的转换,它都会被转换成 string 类型。

不足

虽然咱们手撕了一个 string 但是 咱们撕的只能说是一个简易版,我只是把 string 里面常用,经典的函数带着大家手撕了一下,库里面的 string 的功能是非常强大的,而且每个函数都有多种重载。

所以说,咱们手撕的还是会有很多功能做不到的,例如 

ssy :: string s1(ssy);ssy :: string s2(666);s1 += s2;

咱们的 operator +=  是不支持 对象间的 += 的。

结束语

大家可以通过这篇博客感受一下string 的创建,也可以继续完善咱们自己的string

革命尚未成功,同志仍须努力

相关文章:

手撕string

目录 引言 1&#xff0c;成员变量 2&#xff0c;先建一个可以跑的 2_1&#xff0c;构造函数 2_2&#xff0c; 扩容函数reserve 2_3&#xff0c;push_back 2_4&#xff0c;append[ ] 2_5&#xff0c;operator << 2_6&#xff0c;测试一下&#xff0c;看猪跑 3&…...

12款星光闪光污迹艺术绘画效果Clip Studio Paint笔刷画笔+闪光纹理图片 Clip Studio Glitter Texture Brushes

这 12 种 Clip Studio 画笔 额外的闪光纹理包含闪光、污迹、星光和闪亮的斑点&#xff0c;为您的艺术增添额外的流行感。想想闪光胶&#xff0c;但已经长大了&#xff08;而且更好&#xff09;。想象一下&#xff1a;无论您是用微小的闪光还是厚实的微光涂鸦&#xff0c;都有适…...

5G_WiFi_CE_杂散测试

目录 一、规范要求 1、法规目录&#xff1a; 2、限值&#xff1a; &#xff08;1&#xff09;带外发射杂散 &#xff08;2&#xff09;带内发射杂散 &#xff08;3&#xff09;接收杂散 二、测试方法 1、带外发射杂散 &#xff08;1&#xff09;测试条件 &#xff08…...

蓝卓为中小制造企业注入数字化转型活力

随着劳动力成本上升,原材料价格上涨,企业生产成本逐年增加&#xff0c;市场竞争越来越激烈&#xff0c;传统的中小制造企业面临着巨大的压力。 通过数字化转型应对环境的变化已成为行业共识&#xff0c;在数字化的进程中&#xff0c;中小企业首要考虑生存问题&#xff0c;不能…...

集成 shardingsphere-jdbc 常见问题

一、报错内容 Caused by: org.apache.ibatis.executor.ExecutorException: Error preparing statement. Cause: org.apache.shardingsphere.infra.exception.kernel.metadata.TableNotFoundException: Table or view t_xxx does not exist. 解决 1、配置 !SHARDING rules:-…...

DeepSeek接入飞书多维表格,效率起飞!

今天教大家把DeepSeek接入飞书表格使用。 准备工作&#xff1a;安装并登录飞书&#xff1b;可以准备一些要处理的数据&#xff0c;确保数据格式正确&#xff0c;如 Excel、CSV 等&#xff0c;也可直接存储到飞书多维表格。 创建飞书多维表格&#xff1a;打开飞书&#xff0c;点…...

AI来了,新手如何着手学习软件开发?

AI时代新手学习软件开发的7步进化指南 &#xff08;附具体工具与避坑策略&#xff09; 一、建立“人机协作”学习观 AI是教练&#xff0c;不是替身 正确姿势&#xff1a;用AI辅助理解概念&#xff08;如让DeepSeek 、ChatGPT用生活案例解释递归&#xff09;&#xff0c;但坚持手…...

sqli-labs靶场 less5

文章目录 sqli-labs靶场less 5 报错注入 sqli-labs靶场 每道题都从以下模板讲解&#xff0c;并且每个步骤都有图片&#xff0c;清晰明了&#xff0c;便于复盘。 sql注入的基本步骤 注入点注入类型 字符型&#xff1a;判断闭合方式 &#xff08;‘、"、’、“”&#xf…...

AI基础02-图片数据采集

上篇文章我们学习了文本的数据采集&#xff0c;今天主要了解一下图片数据采集的方法。图片采集方法通常有网页采集和实时采集&#xff08;传感器采集&#xff09;两种。我们学习一下如何利用python 工具和笔记本计算机摄像头进行图片数据的实时采集。 1&#xff09;cv2库简介 …...

QT音乐播放器(1):数据库保存歌曲

实现功能&#xff1a;用数据库保存本地导入和在线搜索的歌曲记录 目录 一. 保存本地添加的歌曲 1. 使用QSettings &#xff08;1&#xff09;在构造函数中&#xff0c;创建对象。 &#xff08;2&#xff09;在导入音乐槽函数中&#xff0c;保存新添加的文件路径&#xff0c…...

Java面试黄金宝典22

1. 树的中序遍历&#xff0c;除了递归和栈还有什么实现方式 定义 Morris 遍历是一种用于二叉树遍历的算法&#xff0c;它利用树中大量空闲的空指针&#xff0c;在不使用额外栈空间和递归的情况下&#xff0c;完成树的遍历。通过建立临时的线索连接&#xff0c;使得可以按照中…...

英伟达GB300新宠:新型LPDDR5X SOCAMM内存

随着人工智能&#xff08;AI&#xff09;、机器学习&#xff08;ML&#xff09;和高性能计算&#xff08;HPC&#xff09;应用的快速发展&#xff0c;对于高效能、大容量且低延迟内存的需求日益增长。NVIDIA在其GB系列GPU中引入了不同的内存模块设计&#xff0c;以满足这些严格…...

验证Linux多进程时间片切换的程序

​​ 一、软件需求 在同时运行多个CPU密集型进程时&#xff0c;需采集以下统计信息&#xff1a; 当前运行在逻辑CPU上的进程ID每个进程的运行进度百分比 实验程序设计要求&#xff1a; 1. 命令行参数 参数说明示例值n并发进程数量3total总运行时长&#xff08;毫秒&…...

Linux学习笔记(应用篇四)

基于I.MX6ULL-MINI开发板 输入设备tslib库 输入设备 触摸屏 触摸屏设备是绝对位移设备可以上报绝对位移事件 触摸可分为单触摸和双触摸 BTN_TOUCH &#xff1a;按压触摸屏和松开会触发上报&#xff0c;滑动时不会 单触摸上报事件 ABS_X&#xff1a; X 轴绝对位移坐标值 ABS_Y…...

linux基本命令(1)--linux下的打包命令 -- tar 和gzip

tar 解压 &#xff0c;打包 语法&#xff1a;tar [主选项辅选项] 文件或者目录 使用该命令时&#xff0c;主选项是必须要有的&#xff0c;它告诉tar要做什么事情&#xff0c;辅选项是辅助使用的&#xff0c;可以选用。 主选项&#xff1a; c 创建新的档案文件。如果用户想备…...

【Linux内核系列】:文件ELF格式详解

&#x1f525; 本文专栏&#xff1a;Linux &#x1f338;作者主页&#xff1a;努力努力再努力wz &#x1f4aa; 今日博客励志语录&#xff1a; “人生没有白走的路&#xff0c;你踩过的荆棘、蹚过的泥泞&#xff0c;都会在某一刻&#xff0c;变成你脚下的风。” ★★★ 本文前置…...

CubeMx ——新建工程

新建工程 选择芯片 设置主频 选择调试口 选择晶振口 设置 GPIO 输出 工程设置 LED 闪烁 /* USER CODE BEGIN WHILE */while (1){HAL_GPIO_TogglePin(GPIOH, GPIO_PIN_10);HAL_Delay(1000);/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */...

使用postcss-px-to-viewport-8-plugin将页面转响应式

使用postcss-px-to-viewport-8-plugin将页面转响应式 背景 公司最近接了个项目&#xff0c;其中要求部分页面在移动端正常显示&#xff0c;第一方案是使用响应式&#xff0c;但是设计稿最后出的和Web端差别较大同时两端的功能不是完全对齐的&#xff0c;所以决定使用两个模块…...

Java---类与对象

类与对象 前言&#xff1a;一、面向对象二、类的定义1.类的定义格式2.访问修饰限定符 三、类的实例化四、this引用1.this引用2.this引用的原因 五、对象的构造和初始化1.初始化对象2.构造方法(1).构造方法的概念&#xff1a;(2).特性&#xff1a;(3).this调用:3.就地初始化4.默…...

告别桌面杂乱与充电焦虑,移速165W百变桌面充电站首发体验

告别桌面杂乱与充电焦虑&#xff0c;移速165W百变桌面充电站首发体验 哈喽小伙伴们好&#xff0c;我是Stark-C~ 先如今&#xff0c;家里的电子产品越来越多&#xff0c;手机、平板、电脑三件套已经是基础配置&#xff0c;还有相机、Switch、智能手表等&#xff0c;这些产品用…...

基于springboot+vue的农产品电商平台

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…...

dom0运行android_kernel: do_serror of panic----failed to stop secondary CPUs 0

问题描述&#xff1a; 从日志看出,dom0运行android_kernel&#xff0c;刚开始运行就会crash,引发panic 解决及其原因分析&#xff1a; 最终问题得到解决&#xff0c;发现是前期在调试汇编阶段代码时&#xff0c;增加了汇编打印的指令&#xff0c;注释掉这些指令,问题得到解决。…...

MySQL 语句

MySQL 语句教程博客 MySQL 是目前广泛应用的关系型数据库管理系统&#xff0c;本文将详细介绍 MySQL 中常用的 SQL 语句及其应用&#xff0c;内容主要涵盖以下部分&#xff1a; DDL&#xff08;数据定义语言&#xff09; DML&#xff08;数据操作语言&#xff09; DQL&#…...

MySQL General Log

MySQL General Log MySQL General Log General Log 的开启General Log 的用法log_output 参数 MySQL主从复制&#xff1a;https://blog.csdn.net/a18792721831/article/details/146117935 MySQL Binlog&#xff1a;https://blog.csdn.net/a18792721831/article/details/146606…...

自动关机监控器软件 - 您的电脑节能助手

## 自动关机监控器 - 您的电脑节能助手 自动关机监控器是一款基于Python开发的实用工具&#xff0c;旨在帮助用户节省电力资源并延长电脑使用寿命。该程序通过监控用户的鼠标和键盘活动&#xff0c;在设定的无活动时间后自动关闭计算机&#xff0c;特别适合需要长时间离开电脑但…...

基于改进粒子群算法的多目标分布式电源选址定容规划(附带Matlab代码)

通过分析分布式电源对配电网的影响&#xff0c;以有功功率损耗、电压质量及分布式电源总容量为优化目标&#xff0c;基于模糊理论建立了分布式电源在配电网中选址定容的多目标优化模型&#xff0c;并提出了一种改进粒子群算法进行求解。在算例仿真中&#xff0c;基于IEEE-14标准…...

解锁健康密码:拥抱多元养生新方式

在追求高质量生活的当下&#xff0c;健康养生不再是一句空洞的口号&#xff0c;而是融入到日常生活的方方面面。它不仅关乎我们的身体健康&#xff0c;更与心理状态和生活品质息息相关。下面&#xff0c;就为大家介绍一些实用的养生知识&#xff0c;帮助大家开启健康生活之旅。…...

@Slf4j注解

Slf4j注解是Lombok库提供的一个注解&#xff0c;用于简化日志记录器的创建。使用该注解后&#xff0c;无需手动创建Logger实例&#xff0c;编译器会自动帮你完成这一步。以下是使用Slf4j注解打印日志的步骤和示例&#xff1a; 使用步骤 1. 引入依赖&#xff1a;在项目中引入SL…...

firewall-cmd添加访问规则

若要使用 **firewall-cmd** 允许 192.168.3.0/24 网段访问本地的 8088 端口&#xff0c;你可以按照以下步骤操作。 临时允许访问 如果你仅需临时允许该网段访问 8088 端口&#xff0c;可使用如下命令&#xff1a; firewall-cmd --add-rich-rulerule family"ipv4" …...

【Linux网络与网络编程】02.初识Socket编程

1. 数据传输的目的 前一篇文章中我们讲解了网络传输的流程&#xff0c;那么网络传输的目的是什么呢&#xff1f;难道我们只是将数据从一台主机传输到另一台主机吗&#xff1f; 当然不是的&#xff01;因为数据是给人用的。比如&#xff1a;聊天是人在聊天&#xff0c;下载是人…...

Python库()

1.概念 Matplotlib 库&#xff1a;是一款用于数据可视化的 Python 软件包&#xff0c;支持跨平台运行&#xff0c;它能够根据 NumPy ndarray 数组来绘制 2D 图像&#xff0c;它使用简单、代码清晰易懂 Matplotlib 图形组成&#xff1a; Figure&#xff1a;指整个图形&#xf…...

CVPR-2025 | 南洋理工基于图表示的具身导航统一框架!UniGoal:通用零样本目标导航方法

作者&#xff1a;Hang Yin 1 ^{1} 1, Xiuwei Xu 1 ^{1} 1, Linqing Zhao 1 ^{1} 1, Ziwei Wang 2 ^{2} 2, Jie Zhou 1 ^{1} 1, Jiwen Lu 1 ^{1} 1单位&#xff1a; 1 ^{1} 1南洋理工大学&#xff0c; 2 ^{2} 2清华大学论文标题&#xff1a;UniGoal: Towards Universal Zero-sho…...

Banner区域

div下 justify-content:space-between 左侧测导航left 在这里插入图片描述 在这里插入图片描述...

【C++】C++11介绍列表初始化右值引用和移动语义

个人主页 &#xff1a; zxctscl 如有转载请先通知 文章目录 1. C11简介2. 统一的列表初始化2.1&#xff5b;&#xff5d;初始化2.2 std::initializer_list 3. 声明3.1 auto3.2 decltype3.3 nullptr 4. 范围for循环4.1 范围for的语法4.2 范围for的使用条件 5. STL中一些变化6. 右…...

基于Spring Boot的高校普法系统的设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…...

算法为舟 思想为楫:AI时代,创作何为?

在科技浪潮汹涌澎湃的当下,AI技术以前所未有的态势席卷各个领域,创作领域亦未能幸免。当生成式AI展现出在剧本撰写、诗歌创作、图像设计等方面的惊人能力时,人类创作者仿佛置身于文明演化的十字路口,迷茫与困惑交织,兴奋与担忧并存。在AI时代,创作究竟该何去何从?这不仅…...

GPT-4o 原生图像生成技术解析:从模型架构到吉卜力梦境的实现

最近不少 AI 爱好者、设计师、Vlogger 在社交平台晒出了 GPT-4o 生成的梦幻图像&#xff0c;尤其是吉卜力风格的作品——柔和光影、日系构图、治愈色彩、富有情感的角色表达&#xff0c;一下子击中了无数人的“童年回忆 审美舒适区”。 &#x1f3a8; 下面是一些 GPT-4o 实际生…...

无线通信技术(二):ITU、3GPP及传统波段对无线频谱的划分

本文介绍国际标准组织ITU、3GPP和传统波段对无线频谱的划分 。 一.ITU波段划分 国际电信联盟&#xff08;ITU&#xff09;将无线电频谱划分为多个频段&#xff0c;并根据频率范围和业务需求分配用途。 ITU对无线频谱的划分 带号频带名称频率范围波长范围波段名称典型应用…...

[Python学习日记-88] 并发编程之多进程 —— 队列与生产者消费者模型

[Python学习日记-88] 并发编程之多进程 —— 队列与生产者消费者模型 简介 队列 一、队列的介绍 二、队列的使用 生产者消费者模型 一、为什么要使用生产者消费者模型 二、什么是生产者消费者模型 三、生产者消费者模型的优势 四、生产者消费者模型的实现 JoinableQ…...

Vue学习笔记集--computed

computed 在 Vue 3 的 Composition API 中&#xff0c;computed 用于定义响应式计算属性 它的核心特性是自动追踪依赖、缓存计算结果&#xff08;依赖未变化时不会重新计算&#xff09; 基本用法 1. 定义只读计算属性 import { ref, computed } from vue;const count ref(…...

python之多线程,多进程理解

目录 一,什么是多线程多进程 1,1 多线程 1.2 多进程 二,多线程 2.1 使用threading模块 三,多进程 3.1 使用multiprocessing模块 3.2 多进程的优势 3.3 进程间的通信 四,如何选择多进程还是多线程 五,异步编程的替代方案(协程) 在开发过程中&#xff0c;提升程序的并…...

3月29日星期六今日早报简报微语报早读

3月29日星期六&#xff0c;农历三月初一&#xff0c;早报#微语早读。 1、全国公立医疗机构自3月31日起全面停止收取门诊预交金&#xff1b; 2、永辉超市“胖东来调改店”已达47家店 一线员工薪酬涨幅50%以上&#xff1b; 3、两孩家庭补10万&#xff0c;三孩家庭补20万&#…...

栈:隐匿于计算机科学长卷的璀璨明珠

目录 &#x1f680;前言&#x1f31f;栈的概念&#x1f914;栈的两种实现形式&#x1f4af;数组栈实现&#x1f4af;链表栈实现 ⚙️数组栈与链表栈对比&#x1f427;递归与栈&#x1f4bb;总结 &#x1f680;前言 大家好&#xff01;我是 EnigmaCoder。 在计算机科学的宏大版图…...

【万字总结】前端全方位性能优化指南(七)——按需加载、虚拟列表、状态管理

现代框架高阶优化——突破复杂场景的性能临界点 当Web应用进入「十万级组件、百万级数据」的复杂场景时,传统优化手段开始触及框架底层瓶颈:Redux的单一Store引发级联渲染风暴、全量加载的首屏资源阻塞关键交互、长列表滚动导致内存飙升直至页面崩溃……这些痛点正在倒逼框架…...

合并石子 | 第十四届蓝桥杯省赛JavaB组

在桌面从左至右横向摆放着 N 堆石子。 每一堆石子都有着相同的颜色&#xff0c;颜色可能是颜色 0&#xff0c;颜色 1 或者颜色 2 中的其中一种。 现在要对石子进行合并&#xff0c;规定每次只能选择位置相邻并且颜色相同的两堆石子进行合并。 合并后新堆的相对位置保持不变&…...

【商城实战(94)】构建高并发的负载均衡与集群架构

【商城实战】专栏重磅来袭&#xff01;这是一份专为开发者与电商从业者打造的超详细指南。从项目基础搭建&#xff0c;运用 uniapp、Element Plus、SpringBoot 搭建商城框架&#xff0c;到用户、商品、订单等核心模块开发&#xff0c;再到性能优化、安全加固、多端适配&#xf…...

鸿蒙开发:了解Canvas绘制

前言 本文基于Api13 系统的组件无法满足我们的需求&#xff0c;这种情况下就不得不自己自定义组件&#xff0c;除了自定义组合组件&#xff0c;拓展组件&#xff0c;还有一种方式&#xff0c;那就是完全的自绘制组件&#xff0c;这种情况&#xff0c;常见的场景有&#xff0c;比…...

Ubuntu和Windows实现文件互传

1.开启Ubuntu下的FTP服务&#xff1a; &#xff08;1&#xff09;终端输入&#xff1a; sudo apt-get install vsftpd&#xff08;2&#xff09;安装完成后&#xff1a; 终端输入&#xff1a; /etc 是 Linux 系统的全局配置文件目录&#xff0c;存储系统和应用程序的配置信息…...

dav_pg8_vacuum

一、VACUUM基础概念 1.1 VACUUM的作用 在PostgreSQL中&#xff0c;当数据被更新或删除时&#xff0c;系统并不会立即释放物理空间&#xff0c;而是将其标记为 “可重用”。 随着时间推移&#xff0c;表中的死元组&#xff08;已删除或已被新版本覆盖的数据&#xff09;会越来越…...

革新汽车安全通信技术,美格智能全系车载通信模组支持NG-eCall

根据QYR&#xff08;恒州博智&#xff09;的统计及预测&#xff0c;2024年全球汽车无线紧急呼叫&#xff08;eCall&#xff09;设备市场销售额达到了25.17亿美元&#xff0c;预计2031年将达到44.97亿美元&#xff0c;年复合增长率&#xff08;CAGR 2025-2031&#xff09;为8.8%…...