std::string的模拟实现
目录
string的构造函数
无参数的构造函数
根据字符串初始化
用n个ch字符初始化
用一个字符串的前n个初始化
拷贝构造
用另一个string对象的pos位置向后len的长度初始化
[ ]解引用重载
迭代器的实现
非const版本
const版本
扩容reserve和resize
reserve
resize
push_back和append
push_back
append
+=运算符重载
insert插入
erase删除
find
substr
流插入和流提取
比较
赋值运算符重载
补充
string是库中用于储存字符串的类,其底层实际上是顺序表。
namespace cfl
{class string{public:private:char* _str; //指向储存字符串的起始位置size_t _size; //存储有效字符个数size_t _capacity; //存储开辟的空间总个数static size_t npos;};size_t string::npos = -1;
}
string中有一个静态变量是npos类型是size_t,但是定义是却定义为-1,所以npos强转为了无符号整形,也就是能存储size_t类型的最大值,其用来表示整个字符串。
string的构造函数
参考文献:string::string - C++ Referencehttps://legacy.cplusplus.com/reference/string/string/string/
string的构造一共有中其中有一种的实现需要迭代器,在下面实现迭代器的时候讲解,先完成前6种。
无参数的构造函数
//无参数的构造函数
string():_str(new char('\0')) //此处不直接设置nullptr,将其设置为空字符串,_size(0),_capacity(0)
{}
根据字符串初始化
//根据字符串初始化的构造函数
string(const char* str):_size(strlen(str)), _capacity(strlen(str))
{_str = new char[_size]; //此处也可以在上面进行初始化,但是要注意顺序 memcpy(_str, str, _size + 1); //_size+1是要拷贝'\0'
}
用n个ch字符初始化
//用n个ch字符初始化的构造函数
string(size_t n, const char ch):_str(new char[n+1]) //要开辟n+1个空间是为了存储'\0', _size(n), _capacity(n)
{memset(_str,ch, n);_str[_size] = '\0';
}
用一个字符串的前n个初始化
//用一个字符串的前n个初始化的构造函数
string(const char* str, size_t n):_str(new char[n + 1]), _size(n), _capacity(n)
{memcpy(_str, str, n);_str[_size] = '\0';
}
拷贝构造
//拷贝构造函数
string(const string& s)
{_capacity = s._capacity;_str = new char[_capacity + 1];_size = s._size;memcpy(_str, s._str, _size);_str[_size] = '\0';
}
用另一个string对象的pos位置向后len的长度初始化
//用另一个string对象的pos位置向后len的长度初始化的构造函数
string(const string& s, size_t pos, size_t len = npos) //len给一个缺省值是npos,代表整个字符串
{if (len == npos || len + pos >= s._size){len = s._size - pos;_capacity=len;_str = new char[_capacity + 1];_size = len;_str[_size] = '\0';}else{_capacity = len;_str = new char[_capacity + 1];_size = len;_str[_size] = '\0';}
}
[ ]解引用重载
string类对象可以像数组一样通过下标访问是因为解引用运算符重载。
char& operator[](size_t pos)
{return _str[pos];
}
迭代器的实现
迭代器实际上可以看成一个指针,但是其与指针有一些区别。范围for的底层逻辑就是迭代器,实现了迭代器,范围for才能使用。
非const版本
//迭代器的实现
typedef char* iterator;
typedef const char* const_iterator;
iterator begin() //begin就是返回起始位置的指针
{return _str;
}
iterator end()
{return _str + _size; //返回最后一个字符下一个位置。
}
const版本
const_iterator begin()const
{return _str;
}
const_iterator end()const
{return _str + _size;
}
扩容reserve和resize
reserve
reserve扩容要帮助,传过去的参数比当前空间大才扩容,比当前空间小则不做处理。
void reserve(size_t n)
{if(n>_capacity){//先开辟新的空间,再将数据拷贝回来char* tmp= new char[n + 1];memcpy(tmp, _str, _size + 1);_str = tmp;_capacity = n;}
}
resize
resize和reverse扩容有所区别,传给resize的空间小于_size会将n后面的所有数据删除,resize还会对像开辟的空间进行初始化。
void resize(size_t n, char ch = '\0')
{if (n < _size){_size = n;_str[_size] = '\0';}else{reserve(n);for (int i = _size; i < n; i++)_str[i] = ch;_str[_capacity] = '\0';}
}
push_back和append
push_back
尾插直接向顺序表结尾插入数据,尾插是也要考虑扩容。
void push_back(char ch)
{if (_size == _capacity){reserve(_capacity == 0 ? 4 : _capacity * 2);}_str[_size] = ch;++_size;_str[_size] = '\0';
}
append
appened是直接在尾部插入字符串。
void append(const char* s)
{size_t len = strlen(s);if (_capacity == _size || len + _size > _capacity){reserve(len + _size);}memcpy(_str + _size, s, len + 1);_size = _size + len;
}
+=运算符重载
string& operator+=(const char ch)
{push_back(ch);return *this;
}string& operator+=(const char* s)
{append(s);return *this;
}
insert插入
insert有两种:在pos位置插入n个字符ch,在pos插入字符串。
void insert(size_t pos, size_t n, char ch)
{assert(pos < _size);//判断空间够不够if (n + _size < _capacity){reserve(n + _size);}//将数据向后移size_t end = _size;while (end >= pos){_str[end + n] = _str[end];--end;}//插入数据for (int i = 0; i < n; i++)_str[pos + i] = ch;
}
void insert(size_t pos, const char* str)
{assert(pos < _size);size_t len = strlen(str);if (_size == _capacity || len + _size > _capacity){reserve(len + _size);}int end = _size;while (end >= pos){_str[end + len] = _str[end];--end;}for (int i = 0; i < len; i++)_str[pos + i] = str[i];
}
erase删除
从pos位置删除len的长度。
void erase(size_t pos, size_t len = npos)
{if (len == npos || pos + len >= _size){_str[pos] = '\0';_size = pos;}else{int end = pos+len;while (end < _size){_str[end - len] = _str[end];++end;}_size -= len;_str[_size] = '\0';}
}
find
从pos位置向后找字符ch。
size_t find(size_t pos, const char ch)
{assert(pos < _size);int cur = pos;while (cur < _size){if (_str[cur] == ch)return cur;++cur;}return npos; //表示没找到
}
substr
返回冲pos位置开始取n个字符的子字符串。
string substr(size_t pos, size_t n)
{int end = pos + n;if (end > _size){end = _size;}string s;for (int i = pos; i < end; i++)s += _str[i];return s;
}
流插入和流提取
流插入和流提取要放在类外定义,具体原因在<类和对象>该文种有讲解。
//流插入
ostream& operator<<(ostream& out, const cfl::string& s)
{for (auto e : s)out << e; //使用循环for可以防止s中间有\0导致停止return out;
}
istream& operator>>(istream& in, cfl::string& s)
{//每次插入一个字符会导致每次尾插都要开空间//设置一个数组,先将字符插入到数组中,再将数组插入到s中char tmp[128];char ch = in.get();//此处使用in.get可以读取输入流中的空格int i = 0;while (ch != '\n'){tmp[i++] = ch;if (i == 127){tmp[127] = '\0';i = 0;s += tmp;}ch = in.get();}tmp[i] = '\0';s += tmp;return in;
}
注意:流插入重载和流提取重载都是string的友元函数。
比较
此处仅实现>和==,其他比较可以直接套用他们两个。
bool operator<(const string& s)
{size_t end1 = _size;size_t end2 = s._size;int i = 0;while (i < end1 && i < end2){if (_str[i] < s._str[i])return true;else if (_str[i] > s._str[i])return false;i++;}if (i < end1)return true;return false;
}bool operator==(const string& s)
{if (_size != s._size)return false;int i = 0;while (i < _size){if (_str[i] != s._str[i])return false;i++;}return true;
}
赋值运算符重载
void swap(string& s)
{std::swap(this->_str, s._str);std::swap(this->_capacity, s._capacity);std::swap(this->_size, s._size);
}string& operator=(string tmp)
{swap(tmp); //此处的tmp是临时变量,又是原对象的拷贝//所以直接将tmp与*this,交换,实现赋值//因为tmp是临时变量出作用域后会将*this的空间释放return *this;
}
补充
补充一些不是太常用的string的成员函数。
1)string::shrink_to_fit()由于将空间缩至有效数据处;
2)string::at(size_t n)返回n处的字符,相当于s1[n];
3)string::replace()替换类中的数据;
4)string::rfind()查找,但是是从后往前找;
5)size_t find_first_of(string& str,size_t pos=0),从pos位置向后找,找到str中的任意一个字符就返回;
6)size_t find_end_of(string& str,size_t pos=npos),已5)不同的是该函数从后往前找:
7)getline(cin,str),读取流中的数据,可指定读取到什么的时候停止,默认是换行符;
8)string to_string()可以将非字符串转化为字符串。
相关文章:
std::string的模拟实现
目录 string的构造函数 无参数的构造函数 根据字符串初始化 用n个ch字符初始化 用一个字符串的前n个初始化 拷贝构造 用另一个string对象的pos位置向后len的长度初始化 [ ]解引用重载 迭代器的实现 非const版本 const版本 扩容reserve和resize reserve resize p…...
GPU、NPU与LPU:大语言模型(LLM)硬件加速器全面对比分析
引言:大语言模型计算基础设施的演进 随着大语言模型(LLM)的快速发展与广泛应用,高性能计算硬件已成为支撑LLM训练与推理的关键基础设施。目前市场上主要有三类处理器用于加速LLM相关任务:GPU(图形处理单元…...
常见限流算法
限流是指在高并发、大流量请求的情况下,限制新的流量对系统的访问,以保证系统服务的安全性。常见的限流算法及其详细介绍如下: 计数器算法(Fixed Window Counter) 原理:使用一个固定时间窗口内的计数器来…...
美国国家航空航天局(NASA)的PUNCH任务
地球浸没在来自太阳的物质流中。这种被称为太阳风的流正在冲刷我们的星球,造成令人叹为观止的极光,影响太空中的卫星和宇航员,甚至影响地面基础设施。 美国宇航局 (NASA) 的 PUNCH(统一日冕和日球层旋光仪 Polarimeter to Unify the Corona and Heliosphere)任务将首次…...
REST API前端请求和后端接收
1、get请求,带"?" http://localhost:8080/api/aop/getResult?param123 GetMapping("getResult")public ResponseEntity<String> getResult(RequestParam("param") String param){return new ResponseEntity<>("12…...
OpenBMC:BmcWeb构造connect对象
OpenBMC:BmcWeb server.run-CSDN博客 server在接收了tcp连接请求后,会构造一个ConnectionType对象,然后通过post调度,运行该对象的start函数 1.ConnectionType类型 其实也就是using ConnectionType = Connection<Adaptor, Handler>;类型 由于ConnectionType实例化于…...
ESLint 深度解析:原理、规则与插件开发实践
在前端开发的复杂生态中,保障代码质量与规范性是构建稳健、可维护项目的基石。ESLint 作为一款强大的代码检查工具,其默认规则与插件能满足多数常见需求,但面对特定团队规范或项目独特要求,自定义 ESLint 插件便成为有力的扩展手段…...
ios使用swift调用deepseek或SiliconFlow接口
调用SiliconFlow API 注册并获取API密钥:打开硅基流动平台官网Models,进行注册和认证。登录后,进入首页,点击左上角三个横杠,选择API密钥,生成密钥并复制。配置第三方应用:打开安装好的Chatbox…...
贪心算法一
> 作者:დ旧言~ > 座右铭:松树千年终是朽,槿花一日自为荣。 > 目标:了解什么是贪心算法,并且掌握贪心算法。 > 毒鸡汤:有些事情,总是不明白,所以我不会坚持。早安! >…...
Java进阶:Dubbo
分布式RPC框架Apache Dubbo 1. 软件架构的演进过程 软件架构的发展经历了由单体架构、垂直架构、SOA架构到微服务架构的演进过程,下面我们分别了解一下这几个架构。 1.1 单体架构 架构说明: 全部功能集中在一个项目内(All in one…...
【Day9】make/makeFile如何让项目构建自动化起飞
【Day9】make/makeFile如何让项目构建自动化起飞 使用make命令编写makefile文件依赖管理增量构建makefile注释:#makefile其他语法 make/makefile递归式工作过程 在Linux中,项目自动化构建是指使用一系列工具和脚本来自动执行软件项目的编译、测试、打包和…...
SCI1区TOP:自适应学习粒子群算法SLPSO,深度解析+性能实测
目录 1.摘要2.改进策略3.自适应学习粒子群算法4.结果展示5.参考文献6.获取代码 1.摘要 粒子群算法(PSO)是一种基于种群的随机搜索方法,广泛应用于科学和工程领域的连续空间优化问题,并已证明其高效性和有效性。许多实际问题的往往…...
迷你世界脚本显示板管理接口:DisPlayBoard
显示板管理接口:DisPlayBoard 迷你世界 更新时间: 2023-04-26 10:21:14 具体函数名及描述如下: 序号 函数名 函数描述 1 showBoard(...) 对玩家显示显示板 2 hideBoard(...) 对玩家隐藏显示板 3 setBoardPicture 对玩家设置显示板的图片…...
如何使用 LLM 生成的术语自动在搜索应用程序上构建 autocomplete 功能
作者:来自 Elastic Michael Supangkat 了解如何在 Elastic Cloud 中,通过使用 LLM 生成的词汇,为搜索应用增强自动补全功能,实现更智能、更动态的搜索建议。 自动补全是搜索应用中的一项关键功能,它通过在用户输入时实…...
电路基础:【1】PN结二极管制作电桥点亮LED灯
第一章:PN结二极管制作电桥点亮LED灯 文章目录 第一章:PN结二极管制作电桥点亮LED灯前言一、电路原理二、电路图与元器件1.电路图 做实验总结 前言 在本章中,我们将探讨如何通过PN结二极管制作电桥电路,并利用该电路点亮LED灯。L…...
蓝桥与力扣刷题(蓝桥 门牌制作)
题目:小蓝要为一条街的住户制作门牌号。 这条街一共有 2020 位住户,门牌号从 1 到 2020编号。 小蓝制作门牌的方法是先制作 0 到 9 这几个数字字符,最后根据需要将字符粘贴到门牌上,例如门牌 1017 需要依次粘贴字符 1、0、1、7&…...
unity console日志双击响应事件扩展
1 对于项目中一些比较长的日志,比如前后端交互协议具体数据等,这些日志内容可能会比较长,在unity控制面板上查看不是十分方便,我们可以对双击事件进行扩展,将日志保存到一个文本中,然后用系统默认的文本查看…...
基于Django创建一个WEB后端框架(DjangoRestFramework+MySQL)流程
一、Django项目初始化 1.创建Django项目 Django-admin startproject 项目名 2.安装 djangorestframework pip install djangorestframework 解释: Django REST Framework (DRF) 是基于 Django 框架的一个强大的 Web API 框架,提供了多种工具和库来构建 RESTf…...
unittest框架 核心知识的系统复习及与pytest的对比
1. unittest 介绍 是什么:Python 标准库自带的单元测试框架,遵循 xUnit 架构(类似Java的JUnit)。 核心概念: TestCase:测试用例的基类,所有测试类需继承它。 TestSuite:测试套件&a…...
嵌入式硬件设计SPI时需要注意什么?
嵌入式硬件设计SPI时需要注意什么? 1. 硬件设计注意事项 关键点注意事项1. 信号完整性- 缩短SCK、MOSI、MISO的走线长度,避免反射干扰。- 使用屏蔽线或差分信号(高速场景)。- 阻抗匹配(特别是高频信号,如50Ω端接)。2. 电源与地线- 电源去耦:每个SPI芯片的VCC附近放置0…...
vscode远程ssh链接服务器
前提:安装并配置好 ssh 服务,并且远程主机和本地主机在同一个局域网。 降级到1.85.2版本并禁用自动更新,因为最新的vscode不支持remote SSH。 【VS Code】VS Code不再支持remote SSH 1.在vscode 扩展中搜索Remote - SSH,下载安装扩展 2.点击 远程资源管理…...
97k倍区间
97k倍区间 ⭐️难度:中等 🌟考点:暴力,2017省赛 📖 📚 import java.util.Scanner;public class Main {static int N 100010;public static void main(String[] args) {Scanner sc new Scanner(System.…...
绝美焦糖暖色调复古风景画面Lr调色教程,手机滤镜PS+Lightroom预设下载!
调色教程 通过 Lr 软件丰富的工具和功能,对风景照片在色彩、影调等方面进行调整。例如利用基本参数调整选项,精准控制照片亮度、对比度、色温、色调等基础要素;运用 HSL 面板可对不同色彩的色相、饱和度以及明亮度进行单独调节;利…...
双王炸爆单,问界M8、M9怎么选?
文 | AUTO芯球 作者 | 雷慢 问界M8一小时小订7500台, 新问界M9一小时订单3800台。 余承东这次直接把一对王炸打了出来, 来看这对大小王, 问界M8预售价36.8万到45.8万, 问界M9预售价47.8万到57.8万, 这两款车&…...
【自学笔记】OpenStack基础知识点总览-持续更新
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 OpenStack基础知识点总览一、OpenStack概述1.1 OpenStack起源1.2 OpenStack的目标与优势1.3 OpenStack的常见核心项目 二、OpenStack的节点类型2.1 控制节点2.2 网络…...
同步 Fork 仓库的命令
同步 Fork 仓库的命令 要将您 fork 的仓库的 main 分支与原始仓库(fork 源)同步,您可以使用以下命令: 首先,确保您已经添加了原始仓库作为远程仓库(如果尚未添加): git remote add…...
2025-03-04 学习记录--C/C++-C语言 判断是否是素数
合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下。💪🏻 C语言 判断是否是素数 一、代码 ⭐️ #include <stdio.h> #include <stdbool.h> // 使用 bool 类型// 判断是否是…...
1、CI/CD 平台安装部署(Gitlab+Jenkins)
CI/CD 平台安装部署 安装部署Gitlab安装Gitlab添加组、创建用户、创建项目 Jenkins 安装Maven 安装和配置Tomcat 安装和配置Jenkins 构建 Maven 项目自由风格项目构建 什么是CI/CD? 通俗来说就是启动一个服务,能够监听代码变化,然后自动执行构…...
数据集路径出错.yaml‘ images not found , missing path
方法一:删除settings.yaml 方法二:dataset_name.yaml改用绝对路径,如最后一张图 错误分析: dataset_name.yaml中的path的路径仅支持绝对路径,写相对路径就会搜索不到,使用settings.json中的路径࿰…...
零基础学习Python 之类(Class)和实例(Instance)_我的学习Python记录12
零基础学习Python 之类(Class)和实例(Instance)_我的学习Python记录12 目录 什么是类和实例?类的作用如何定义类?如何创建实例?类的属性和方法 属性方法 实际案例 案例 1:学生信息…...
Map<String,Object>转换为XML报文的方法
1. 使用 JAXB (Java Architecture for XML Binding) JAXB 是 Java 标准库的一部分,支持将 Java 对象与 XML 相互转换。虽然 JAXB 主要用于将 Java 对象转换为 XML,但可以通过一些技巧将 Map<String, Object> 转换为 XML。 示例代码 import java…...
Linux:如何安装虚拟机
Linux:如何安装虚拟机 第一步首先打开阿里巴巴开源镜像网站然后点击相应要下载链接 选择自己需要的 这个是完整版 这个是联网进行安装系统 这个是基础版只有命令行界面 这里我选择下载基础版 下载好打开vmwareworkstation 开始安装...
HTML 编辑器推荐与 VS Code 使用教程
在进行 HTML 编程时,选择一款合适的 HTML 编辑器能极大地提高开发效率。以下为大家推荐几款常用且功能强大的 HTML 编辑器,同时详细介绍如何使用 VS Code 创建和预览 HTML 文件。 一、HTML 编辑器推荐 VS Code:由微软开发,是一款…...
Python的Pandas和matplotlib库:让数据可视化贼简单
在数据爆炸的时代,数据可视化已成为数据分析的关键环节。Python 作为强大的编程语言,拥有众多用于数据可视化的库,而 pandas 库在其中扮演着重要角色。它不仅能高效处理和分析数据,还具备强大的数据可视化功能,让我们轻…...
私有云基础架构与运维(二)
二.私有云基础架构 【项目概述】 经过云计算基础知识及核心技术的学习后,希望进一步了解 IT 基础架构的演变过 程,通过学习传统架构、集群架构以及私有云基础架构的相关知识,认识企业从传统 IT 基 础架构到私有云基础架构转型的必要性。…...
Java Maven 项目问题:org.dom4j:dom4j:pom:2.1.3 failed to transfer from...
问题与处理策略 问题描述 IDEA 中打开一个 Java 项目,使用 Maven 构建时,报如下错误 org.dom4j:dom4j:pom:2.1.3 failed to transfer from https://repo.maven.apache.org/maven2 during a previous attempt. This failure was cached in the local r…...
DeepSeek group-limited expert routing和负载均衡
Ref https://github.com/deepseek-ai/DeepSeek-V3/blob/main/inference/model.py GitHub - deepseek-ai/EPLB: Expert Parallelism Load Balancer DeepSeek-V3 Technical Report DeepSeek的路由方法 class Gate(nn.Module):def __init__(self, args: ModelArgs):super().__…...
nvidia驱动升级-ubuntu 1804
升级 1.从官网下载*.run驱动文件 2.卸载原始驱动 sudo /usr/bin/nvidia-uninstall sudo apt-get --purge remove nvidia-\* # 可能不需要加-\ sudo apt-get purge nvidia-\* # 可能不需要加-\ sudo apt-get purge libnvidia-\* # 可能不需要…...
金融合规测试:金融系统稳健运行的“定海神针“
一、什么是金融合规测试? 金融行业是受监管最严格的领域之一,各国政府和监管机构(如中国人民银行、银保监会、证监会、美国SEC、欧盟ESMA等)都制定了严格的法律法规,要求金融机构确保系统安全、交易透明、公平竞争&am…...
[Windows] 多系统键鼠共享工具 轻松跨系统控制多台电脑
参考原文:[Windows] 多系统键鼠共享工具 轻松跨系统控制多台电脑 还在为多台电脑需要多套键盘鼠标而烦恼吗?是不是在操控 Windows、macOS、Linux 不同系统电脑时手忙脚乱?现在,这些问题通通能解决!Deskflow 软件闪亮登…...
vue3 组合式API:透传 Attributes(v-bing与:)—setup() 上下文对象ctx.attrs
一、概念及举例说明透传 attribute与模板语法中的Attribute(v-bind) 透传 attribute:传递给一个组件没有通过 props 与 emits 的attribute或者v-on事件监听(常见的:calss、style、id) 举例:当一个组件以单个元素为根元素渲染时,透传 attribute 会自动被添加到根元素上 …...
记录一次利用条件索引优化接口性能的实践
一、业务背景 某表数据量达到4000w,需要每天定时任务处理20w条。前2周内SQL执行无任何问题,非常快,效率比较高。随着处理完的数据量变大,处理完数据状态设置为1,SQL执行效率越来越差,已经达到了惊人的4.6秒…...
Anaconda 部署 DeepSeek
可以通过 Anaconda 环境部署 DeepSeek 模型,但需结合 PyTorch 或 TensorFlow 等深度学习框架,并手动配置依赖项。 一、Anaconda 部署 DeepSeek 1. 创建并激活 Conda 环境 conda create -n deepseek python3.10 # 推荐 Python 3.8-3.10 conda activate…...
MATLAB中lookAheadBoundary函数用法
目录 语法 说明 示例 匹配指定模式之前的位置 匹配指定模式之前的边界以外的边界 lookAheadBoundary函数的功能是匹配指定模式之前的边界。 语法 newpat lookAheadBoundary(pat) 说明 newpat lookAheadBoundary(pat) 创建匹配 pat 的开头的模式。结果中不包含 pat 匹…...
Unity HDR颜色、基础颜色、强度强度、HDR面板Intensity之间的相互转换
目录 前言: 一、UnityHDR面板的规律 二、HDR与基础颜色转换,HDR强度获取,输入设置强度获取 1.基础色->HDR颜色 2.HDR颜色->基础色 3.获取HDR颜色在面板中的强度 4.获取HDR颜色在面板设置输入时的强度 前言: HDR&#…...
nvm 让 Node.js 版本切换更灵活
有很多小伙伴前端开发进程中,我们常常会遇到不同项目依赖不同版本 Node.js 的情况。我们不可能去卸载重新安装适应的版本去安装依赖或者启动项目。为了避免版本冲突带来的一系列麻烦,在这里给大家推荐一款Node.js 版本管理工具——nvm(Node V…...
微机惊魂记
春天午后的阳光懒洋洋地洒在教学楼的走廊上,我跟着同学们排着队往四楼的微机教室走去。楼梯间的窗户开着,飘进来阵阵樱花的香气,让人昏昏欲睡。 微机教室在一栋普通的五层教学楼里,墙壁刷着淡绿色的漆,墙角还有些剥落…...
Windows下安装VMware Workstation 17并设置支持MacOS
VMware Workstation 17 介绍 VMware Workstation 17 是 VMware 公司推出的一款强大的桌面虚拟化软件,适用于 Windows 、 Linux 和FreeBSD等操作系统。它允许用户在单一物理计算机上创建、运行和管理多个虚拟机(VM),每个虚拟机都可…...
[MySQL初阶]MySQL(5)内置函数详解
标题:[MySQL初阶]MySQL(5)内置函数详解 水墨不写bug 文章目录 一、日期函数1. current_date()2. current_time()3. current_timestamp()4. date(datetime)5. date_add(date, interval expr unit)6. date_sub(date, interval expr unit)7. dat…...
Linux下安装elasticsearch(Elasticsearch 7.17.23)
Elasticsearch 是一个分布式的搜索和分析引擎,能够以近乎实时的速度存储、搜索和分析大量数据。它被广泛应用于日志分析、全文搜索、应用程序监控等场景。 本文将带你一步步在 Linux 系统上安装 Elasticsearch 7.17.23 版本,并完成基本的配置࿰…...