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

手写CString类

  1. 学习和理解字符串处理机制:手写 CString 类是深入学习字符串处理和内存管理的有效方式。通过实现构造函数、析构函数、赋值运算符等,能够理解字符串在内存中的存储方式、动态内存分配和释放的原理,以及如何处理字符串的复制、拼接、查找等操作。这有助于掌握基本的编程概念和内存管理技巧,提升编程能力。
  2. 性能优化:标准库中的字符串类(如 std::string)虽然功能丰富,但在某些特定场景下可能存在性能瓶颈。自己手写 CString 类可以根据具体需求进行性能优化。例如,在处理大量短小字符串时,可以采用不同的内存管理策略,避免频繁的内存分配和释放,从而提高程序的运行效率。
  3. 内存控制:手写 CString 类能够更精确地控制内存的使用。可以根据实际需求选择合适的内存分配方式,避免不必要的内存浪费。例如,在内存有限的嵌入式系统中,自己实现字符串类可以更好地管理内存,确保系统的稳定性和性能。
  4. 兼容性和跨平台性:在一些特定的开发场景中,可能需要与旧的代码库或特定的平台进行兼容。自己实现 CString 类可以根据具体的兼容性需求进行设计,确保在不同的平台和环境中都能正常工作。例如,在一些不支持标准库的平台上,手写 CString 类可以提供基本的字符串处理功能。
  5. 定制化需求:标准库中的字符串类可能无法满足某些特定的定制化需求。自己手写 CString 类可以根据具体的业务逻辑进行定制。例如,在处理特定格式的字符串时,可以在自定义的 CString 类中添加相应的处理方法,提高代码的针对性和效率。
  6. 深入理解语言特性:手写 CString 类可以深入理解 C++ 语言的特性,如运算符重载、异常处理、模板等。通过实现 CString 类,可以更好地掌握这些特性的使用方法,提高对 C++ 语言的理解和运用能力。
  7. 代码可读性和可维护性:对于一些小型项目或特定的代码模块,手写 CString 类可以使代码更加简洁和易读。可以根据项目的实际情况,设计出符合项目风格的字符串类,提高代码的可维护性。

一、基本功能

1. 构造与析构

cpp

CString();                          // 默认构造空字符串
CString(const CString& src);        // 拷贝构造
CString(const char* lpsz);          // 从C风格字符串构造
CString(char ch);                   // 从单个字符构造
~CString();                         // 析构函数

2. 赋值操作

cpp

CString& operator=(char ch);                // 字符赋值
CString& operator=(const char* lpsz);       // C风格字符串赋值
CString& operator=(const CString& src);     // CString赋值

3. 字符串信息

cpp

int GetLength() const;          // 获取字符串长度(不含终止符)
bool IsEmpty() const;           // 判断是否为空字符串
void Empty();                   // 清空字符串内容

4. 字符访问

cpp

char GetAt(int iIndex);         // 获取指定位置字符
void SetAt(int iIndex, char ch); // 修改指定位置字符
char& operator[](int iIndex);   // 重载[]运算符(可修改)
const char& operator[](int iIndex) const; // 常量版本

二、字符串操作

1. 查找功能

cpp

int Find(char ch) const;                  // 查找字符首次出现位置
int Find(char ch, int nStart) const;      // 从nStart开始查找字符
int Find(const char* lpszSub) const;      // 查找子字符串
int Find(const CString& sSub) const;      // 查找CString对象
int ReverseFind(char ch) const;           // 查找字符最后一次出现位置
int FindOneOf(char* lpszCharSet) const;   // 查找字符集中任意字符首次出现位置

2. 修改功能

cpp

int Replace(char chOld, char chNew);      // 替换所有指定字符
int Replace(char* lpszOld, char* lpszNew); // 替换所有子字符串
int Remove(char ch);                      // 删除所有指定字符
int Insert(int nIndex, char ch);          // 在指定位置插入字符
int Insert(int nIndex, char* lpsz);       // 在指定位置插入字符串
int Delete(int nIndex, int nCount = 1);   // 删除指定范围字符

3. 子串操作

cpp

CString Left(int nCount) const;           // 截取左边n个字符
CString Right(int nCount) const;          // 截取右边n个字符
CString Mid(int nFirst) const;            // 从nFirst到末尾的子串
CString Mid(int nFirst, int nCount) const; // 从nFirst开始截取nCount个字符

4. 大小写与空白处理

cpp

void MakeUpper();                         // 转换为大写
void MakeLower();                         // 转换为小写
void TrimLeft();                          // 去除左侧空白字符
void TrimRight();                         // 去除右侧空白字符
void Trim();                              // 去除两侧空白字符

5. 其他操作

cpp

CString& MakeReverse();                   // 反转字符串
int Format(const char* pstrFormat, ...);  // 格式化字符串(类似sprintf)
char* GetBuffer(int nMinBufLength);       // 获取内部缓冲区指针

三、运算符重载

1. 连接运算符

cpp

CString& operator+=(char ch);             // 追加字符
CString& operator+=(const char* str);     // 追加C风格字符串
CString& operator+=(const CString& Str);  // 追加CString对象
friend CString operator+(const CString& s1, const CString& s2); // 连接两个CString
friend CString operator+(const CString& s1, char ch);            // 连接CString和字符
friend CString operator+(const CString& s1, char* ch);           // 连接CString和C风格字符串

2. 比较运算符

cpp

friend bool operator==(const CString& s1, const CString& s2); // 判断两个CString是否相等
friend bool operator!=(const CString& s1, const CString& s2); // 判断两个CString是否不等
friend bool operator>(const CString& s1, const CString& s2);  // 比较大小(字典序)
friend bool operator<(const CString& s1, const CString& s2);  // 比较大小
friend bool operator>=(const CString& s1, const CString& s2); // 比较大小
friend bool operator<=(const CString& s1, const CString& s2); // 比较大小

四、使用示例

1. 基本操作

cpp

CString str1("Hello");      // 从C风格字符串构造
CString str2('A');          // 从字符构造
str1 += " World";           // 追加字符串
str2.MakeUpper();           // 转换为大写
int len = str1.GetLength(); // 获取长度

2. 查找与替换

cpp

int pos = str1.Find("World"); // 查找子串
str1.Replace("World", "C++");  // 替换子串
str1.Remove('l');             // 删除所有 'l'

3. 子串操作

cpp

CString left = str1.Left(5);   // "Hello"
CString mid = str1.Mid(6, 3);  // "C++"

4. 格式化

cpp

CString formatted;
formatted.Format("Value: %d, Name: %s", 42, "John"); // "Value: 42, Name: John"

测试用例

源码下载:一个自定义的CString类,用于处理字符串它模拟了类似MFC中CString的功能,提供了丰富的字符串操作接口,涵盖了构造、赋值、追加、比较、截取、查找、大小换以及空白字符处理等操作资源-CSDN文库

void TestCString()
{printf("开始测试 CString 类...\n");// ===== 构造函数测试 =====printf("测试构造函数...\n");CString s1;                   // 默认构造assert(s1.GetLength() == 0);assert(s1.IsEmpty());CString s2("Hello");          // C风格字符串构造assert(s2.GetLength() == 5);assert(!s2.IsEmpty());assert(s2[0] == 'H');CString s3('A');              // 字符构造assert(s3.GetLength() == 1);assert(s3[0] == 'A');CString s4(s2);               // 拷贝构造assert(s4.GetLength() == 5);assert(s4[0] == 'H');// ===== 基本操作测试 =====printf("测试基本操作...\n");s1 = "World";                 // 赋值运算符assert(s1.GetLength() == 5);assert(s1[0] == 'W');s1 += '!';                    // 追加字符assert(s1.GetLength() == 6);assert(s1[5] == '!');s1 += " Test";                // 追加C风格字符串assert(s1.GetLength() == 11);assert(s1[6] == ' ');s1 += s2;                     // 追加CStringassert(s1.GetLength() == 16);assert(s1[11] == 'H');s1.SetAt(0, 'w');             // 修改指定位置字符assert(s1[0] == 'w');// ===== 查找测试 =====printf("测试查找功能...\n");assert(s2.Find('e') == 1);    // 查找字符assert(s2.Find("ll") == 2);   // 查找子串assert(s2.Find('l', 3) == 3); // 从指定位置查找assert(s2.ReverseFind('l') == 3); // 反向查找assert(s2.FindOneOf("aeiou") == 1); // 查找任意字符// ===== 子串测试 =====printf("测试子串功能...\n");assert(s2.Left(2) == "He");   // 左侧子串assert(s2.Right(3) == "llo"); // 右侧子串assert(s2.Mid(1) == "ello");  // 从指定位置到末尾assert(s2.Mid(1, 2) == "el"); // 从指定位置开始的指定长度// ===== 转换测试 =====printf("测试字符串转换...\n");CString s5("Hello");s5.MakeUpper();assert(s5 == "HELLO");//大写转换s5.MakeLower();assert(s5 == "hello");//小写转换s5.MakeReverse();assert(s5 == "olleh");//反转// ===== 修剪测试 =====printf("测试字符串修剪...\n");CString s6("  \tHello World  \n");s6.TrimLeft();assert(s6 == "Hello World  \n");s6.TrimRight();assert(s6 == "Hello World");s6 = "  \t  \n";s6.Trim();assert(s6.IsEmpty());// ===== 插入与删除测试 =====printf("测试插入与删除...\n");CString s7("Hello");s7.Insert(1, 'a');            // 插入字符assert(s7 == "Haello");s7.Insert(3, "xx");           // 插入字符串assert(s7 == "Haexxllo");s7.Delete(3, 2);              // 删除指定范围assert(s7 == "Haello");s7.Remove('l');               // 删除所有指定字符assert(s7 == "Haeo");// ===== 替换测试 =====printf("测试替换功能...\n");CString s8("Hello");s8.Replace('l', 'x');         // 替换字符assert(s8 == "Hexxo");s8.Replace("xx", "ll");       // 替换字符串assert(s8 == "Hello");// ===== 格式化测试 =====printf("测试字符串格式化...\n");CString s9;s9.Format("%d + %d = %d", 1, 2, 3);assert(s9 == "1 + 2 = 3");// ===== 比较测试 =====printf("测试字符串比较...\n");CString s10("abc");CString s11("abd");assert(s10 < s11);assert(s10 <= s11);assert(s11 > s10);assert(s11 >= s10);assert((s10 == s11) == false);assert((s10 != s11) == true);// ===== 缓冲区测试 =====printf("测试缓冲区操作...\n");// 测试用例 1: 正常情况CString str("HelloWorld");const char* buffer = str.GetBuffer(5);assert(buffer != nullptr);assert(strcmp(buffer, "World") == 0);printf("所有测试通过!\n");
}

相关文章:

手写CString类

学习和理解字符串处理机制&#xff1a;手写 CString 类是深入学习字符串处理和内存管理的有效方式。通过实现构造函数、析构函数、赋值运算符等&#xff0c;能够理解字符串在内存中的存储方式、动态内存分配和释放的原理&#xff0c;以及如何处理字符串的复制、拼接、查找等操作…...

electron结合vue,直接访问静态文件如何跳转访问路径

在最外的app.vue或者index.vue的js模块编写 let refdade ref(1);//刷新&#xff0c;获得请求// 获取完整的查询字符串&#xff08;例如: "?dade/myms"&#xff09;const searchParams new URLSearchParams(window.location.search);// 获取 dade 参数的值&#xf…...

解读RTOS 第七篇 · 驱动框架与中间件集成

1. 引言 在面向生产环境的 RTOS 系统中,硬件驱动框架与中间件层是连接底层外设与上层应用的桥梁。一个模块化、可扩展的驱动框架能够简化外设管理,提升代码可维护性;而丰富的中间件生态则为网络通信、文件系统、图形界面、安全加密等功能提供开箱即用的支持。本章将从驱动模…...

Java GUI开发全攻略:Swing、JavaFX与AWT

Swing 界面开发 Swing 是 Java 中用于创建图形用户界面&#xff08;GUI&#xff09;的库。它提供了丰富的组件&#xff0c;如按钮、文本框、标签等。 import javax.swing.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener;public class SwingExa…...

Cursor 0.5版本发布,新功能介绍

Cursor,这款流行的AI编程平台,刚刚在其v0.50更新中推出了一系列新功能。 首先,请将您的Cursor IDE更新到最新版本。当您打开Cursor时,您应该会在屏幕左下方收到关于最新版本发布的通知。 更多上下文控制: 对上下文的精细可见性,以及最新模型的MAX模式。 聊天升级: 导出…...

Android学习总结之Glide自定义三级缓存(实战篇)

一、为什么需要三级缓存 内存缓存&#xff08;Memory Cache&#xff09; 内存缓存旨在快速显示刚浏览过的图片&#xff0c;例如在滑动列表时来回切换的图片。在 Glide 中&#xff0c;内存缓存使用 LruCache 算法&#xff08;最近最少使用&#xff09;&#xff0c;能自动清理长…...

Maven 下载安装与配置教程

## 1. Maven 简介 Maven 是一个项目管理和构建自动化工具&#xff0c;主要用于 Java 项目。Maven 可以帮助开发者管理项目的构建、报告和文档&#xff0c;简化项目依赖管理。 ## 2. 下载 Maven 1. 访问 Maven 官方网站 [https://maven.apache.org/download.cgi](https://maven.…...

一篇解决Redis:持久化机制

目录 认识持久化 持久化方案 RDB&#xff08;Redis DataBase&#xff09; 手动触发 自动触发 小结 AOF(Append-Only File) AOF缓冲区刷新机制 AOF重写机制 AOF重写流程 ​编辑 混合持久化 认识持久化 我们都知道Mysql有四大特征&#xff0c;原子性&#xff0c;持久…...

使用IDEA创建Maven版本的web项目以及lombok的使用

1.新建项目 2.修改pom.xml 3.修改项目结构 4.在main/java下面写一个Servlet测试一下 然后当前页面往下滑 -Dfile.encodingUTF-8编写一句输出语句&#xff0c;测试是否成功部署配置&#xff0c;并选择到正确的位置&#xff1a; 回车以后 再回到idea里面&#xff0c;发现控…...

2025年AI开发者在开发者占比?

AI开发者在全球开发者中的占比目前没有一个统一且精确的数值&#xff0c;但根据行业报告和调研数据&#xff0c;可以给出以下大致的范围和趋势分析&#xff1a; 1. 综合估算范围 全球范围&#xff1a;AI/ML&#xff08;机器学习&#xff09;开发者约占开发者总数的 5%-15%&…...

SpringBoot整合MQTT实战:基于EMQX构建高可靠物联网通信,从零到一实现设备云端双向对话

一、引言 随着物联网(IoT)技术的快速发展&#xff0c;MQTT(Message Queuing Telemetry Transport)协议因其轻量级、低功耗和高效的特点&#xff0c;已成为物联网设备通信的事实标准。本文将详细介绍如何使用SpringBoot框架整合MQTT协议&#xff0c;基于开源MQTT代理EMQX实现设…...

Windows更新暂停七天关键注册表

环境&#xff1a;windows10 工具&#xff1a;procmon 下载地址&#xff1a;https://learn.microsoft.com/zh-cn/sysinternals/downloads/procmon 监控截图&#xff1a; 界面截图&#xff1a; 注&#xff1a; 1.北京时间差8小时 2.至少是从第二天恢复&#xff0c;即至少暂停…...

小白学习java第18天(上):spring

Spring &#xff1a;是一个轻量级&#xff08;一个小依赖就可以实现还不是轻量级&#xff09;的控制反转&#xff08;IOC&#xff09;和面向切面编程&#xff08;AOP&#xff09;的框架&#xff01; 优点&#xff1a; 1.Spring 是一个开源免费的框架&#xff08;容器&#xf…...

用Array.from实现创建一个1-100的数组

一、代码实现 let arr Array.from({length: 100}, (_, i) > i 1); 二、代码分析 1、Array.from(arrayLike, mapFn) &#xff08;1&#xff09;arrayLike 类数组对象&#xff08;如 { length: 100 }&#xff09;本身没有索引属性&#xff08;如 0: undefined, 1: undefi…...

什么是物联网 IoT 平台?

目录 物联网IoT平台的定义 物联网 IoT 平台发展历程 物联网IoT平台数据的特征 物联网IoT平台的处理流程 专为物联网 IoT 平台处理而生的时序数据库 物联网 IoT 平台时序数据处理面临的挑战及解决方案 收益与价值 物联网 IoT 平台企业案例 至数摇光 x TDengine 华自科技…...

PostgREST:无需后端 快速构建RESTful API服务

在现代 Web 开发中&#xff0c;API 已成为连接前后端的核心桥梁&#xff0c;传统的做法是通过后端框架来构建API接口&#xff0c;然后由前后端人员进行联调。 PostgREST是基于无服务器的一种实现方案&#xff0c;允许开发者将PostgreSQL数据库直接暴露为RESTful API&#xff0…...

3天北京旅游规划

北京 第一天应该集中在故宫和市中心区域&#xff0c;比如天安门、人民广场。这样可以体验到北京的历史和政治文化。午餐推荐烤鸭&#xff0c;因为这可是北京的特色。下午可以安排南锣鼓巷&#xff0c;既有古色古香的胡同&#xff0c;又有丰富的美食选择。 第二天的话&#xff0…...

MySQL--day1--数据库概述

&#xff08;以下内容全部来自上述课程&#xff09; 概述 1. 为什么要用数据库 持久化&#xff1a;内存中的数据断电之后就不存在了&#xff0c;所以需要持久化–>需要相关介质。 其中的一个介质就是数据库&#xff1a;存储数据量大、存储数据类型多 2. 数据库与数据库…...

[思维模式-38]:看透事物的关系:什么是事物的关系?事物之间的关系的种类?什么是因果关系?如何通过数学的方式表达因果关系?

一、什么是事物的关系&#xff1f; 事物的关系是指不同事物之间存在的各种联系和相互作用&#xff0c;它反映了事物之间的相互依存、相互影响、相互制约等特性。以下从不同维度为你详细阐述&#xff1a; 1、关系的类型 因果关系 定义&#xff1a;一个事件&#xff08;原因&a…...

图像识别与 OCR 应用实践

图像识别是一种让计算机具备“看”与“理解”图像能力的人工智能技术&#xff0c;其目标是从图像或视频中提取有意义的信息&#xff0c;如物体、人物、场景或文字。在现实生活中&#xff0c;这项技术被广泛应用于面部识别、自动驾驶、安防监控、医疗诊断、图像搜索等多个领域。…...

深入理解卷积神经网络:从基础原理到实战应用

在人工智能领域&#xff0c;卷积神经网络&#xff08;Convolutional Neural Network&#xff0c;简称 CNN&#xff09;凭借其强大的图像识别、处理能力&#xff0c;成为深度学习中不可或缺的技术。无论是自动驾驶汽车识别道路标志&#xff0c;还是医学影像分析辅助疾病诊断&…...

51单片机——交通指示灯控制器设计

设计目标 1、设计一交通灯控制&#xff0c;控制东西方向的红、黄、绿灯和南北方向的红、黄、绿灯。 2、可手动控制和自动控制&#xff0c;设置两个输入控制开关。 手动/自动开关&#xff0c;通过P11的按键输入控制 3、手动&#xff1a;设置开关P11&#xff0c;两种情况&#x…...

vue2 头像上传+裁剪组件封装

背景&#xff1a;最近在进行公司业务开发时&#xff0c;遇到了头像上传限制尺寸的需求&#xff0c;即限制为一寸证件照&#xff08;宽295像素&#xff0c;高413像素&#xff09;。 用到的第三方库&#xff1a; "vue-cropper": "^0.5.5" 完整组件代码&…...

面向对象设计模式之代理模式详解

文章目录 面向对象设计模式之代理模式详解面向对象思想&#xff1a;现代软件开发的基石代理模式&#xff1a;巧妙的中间层设计JavaScript 语法点与代理模式的结合JavaScript 实现代理模式示例代理模式的应用场景 面向对象设计模式之代理模式详解 在现代软件开发的浩瀚领域中&a…...

Leetcode209做题笔记

力扣209 题目分析&#xff1a;想象一个窗口遍历着这个数组&#xff0c;不断扩大右边界&#xff0c;让r。往窗口中添加数字&#xff1a; 此时我们找到了这个窗口&#xff0c;它的和满足了大于等于target的条件&#xff0c;题目让我求最短的&#xff0c;那么我们就尝试来缩短它&…...

SVG 知识详解:从入门到精通

SVG 知识详解&#xff1a;从入门到精通 作为一名前端开发者&#xff0c;我经常会被SVG的魅力所折服。这种基于XML的矢量图形格式&#xff0c;不仅能完美适配各种屏幕分辨率&#xff0c;还能通过CSS和JavaScript进行灵活控制。今天&#xff0c;就让我们一起来深入探索SVG的世界…...

编译openssl源码

openssl版本 1.1.1c windows 安装环境 perl 先安装perl&#xff0c;生成makefile需要 https://strawberryperl.com/releases.html nasm nasm 也是生成makefile需要 https://www.nasm.us/ 安装完perl输入一下nasm&#xff0c;看看能不能找到&#xff0c;找不到的话需要配…...

土壤温湿盐分传感器用于节水农业灌溉引领者三针设计原理便于安装维护

土壤温度部分是由精密铂电阻和高精度变送器两部分组成。变送器部分由电源模块、温度传感模块、变送模块、温度补偿模块及数据处理模块等组成&#xff0c;彻底解决铂电阻因自身特点导入的测量误差&#xff0c;变送器内有零漂电路和温度补偿电路&#xff0c;对使用环境有较高的适…...

Kotlin Compose 与传统 Android UI 开发对比

在移动应用开发领域,Android 开发一直是技术演进的前沿阵地,而 UI 开发作为用户与应用交互的核心环节,其技术体系的变革更是备受瞩目。 技术演进背景 Android UI 开发体系发展脉络 原生 View 体系阶段 在早期的 Android 开发中,原生 View 体系占据了主导地位。开发者通…...

docker-compose——安装redis

文章目录 一、编写docker-compose.yaml文件二、编写redis.conf文件三、启动docker-compose 一、编写docker-compose.yaml文件 version: 3.3 services:redis:image: redis:latestcontainer_name: redisrestart: alwaysports:- 6379:6379volumes:- ./redis/data:/data- ./redis/…...

MFC 调用海康相机进行软触发

初始化相机类文件 #pragma once #include "MvCameraControl.h" class CMvCamera { public:CMvCamera();~CMvCamera();//初始化相机int InitCamera();int SaveCurrentImage(CString filePath);//关闭相机void CloseCamera();//设置int SetEnumValue(IN const char* s…...

第二章 变量和运算符

主要内容 关键字和标识符变量和常量八大基本数据类型Scanner键盘输入基本数据类型的类型转换算术运算符赋值运算符扩展赋值运算符比较运算符逻辑运算符三目运算符运算符的优先级别 学习目标 知识点要求关键字和标识符理解变量和常量掌握八大基本数据类型掌握Scanner键盘输入…...

【starrocks】StarRocks 常见 HTTP 操作与导入错误排查指南

文章目录 一、Stream Load&#xff1a;通过 HTTP 导入数据二、导入状态查询三、取消导入任务四、节点状态监控查看所有 Backend 状态&#xff1a;查看所有 Frontend 状态&#xff1a; 五、导入失败的排查方式1. 查询导入任务状态2. 下载详细错误日志3. 查看 FE/BE 节点日志FE 日…...

网络协议分析 实验七 FTP、HTTP、DHCP

文章目录 实验7.1 FTP协议练习二 使用浏览器登入FTP练习三 在窗口模式下&#xff0c;上传/下传数据文件实验7.2 HTTP(Hyper Text Transfer Protocol)练习二 页面提交练习三 访问比较复杂的主页实验7.3 DHCP(Dynamic Host Configuration Protocol) 实验7.1 FTP协议 dir LIST&…...

ET ProcessInnerSender类(实体) 分析

ProcessInnerSender 作用是进程内部发送Actor消息 字段 TIMEOUT_TIME 超时时间RpcId 用来累加requestCallback 存储RPC的回调事件list 用来获取MessageQueue中的Actor消息 方法 Awake 初始化在MessageQueue中注册待处理的消息队列Destroy 移除在MessageQueue中的消息队列U…...

远程连接工具

绿色轻便ToDesk https://www.todesk.com/download.html 向日葵 https://sunlogin.oray.com/download...

MySQL库级管理:数据库管理与存储引擎剖析

引言 各位数据库爱好者们好&#xff01;今天我们要深入探讨MySQL数据库的基本操作&#xff0c;这是每位开发者必须掌握的"内功心法" &#x1f4aa;。无论你是刚接触MySQL的小白&#xff0c;还是需要复习基础的老手&#xff0c;这篇教程都将带你系统学习数据库的核心…...

MongoDB 的核心概念(文档、集合、数据库、BSON)是什么?

MongoDB 是一个面向文档的数据库&#xff0c;它的核心概念与传统的关系型数据库&#xff08;RDBMS&#xff09;有所不同。以下是它的四个主要核心概念&#xff1a; 文档 (Document) 定义&#xff1a; 文档是 MongoDB 中的基本数据单元。它类似于关系型数据库中的一行记录&#…...

占位符读取标准输入缓冲区规则

1、如果标准输入缓冲区中的前若干个字符都是空白字符&#xff0c;%s&#xff0c;%d&#xff0c;%f都能直接跳过并且从第一个非空白字符开始读取&#xff0c;但%c不能&#xff0c;而是直接读取。 2、%s遇到空白字符时停止&#xff0c;不会读取遇到的空白字符。 3、%d遇到非数字…...

使用Docker部署MongoDB

使用Docker部署MongoDB 使用Docker部署MongoDB是一种快速、便捷的方式&#xff0c;以下是详细步骤&#xff1a; 1. 基本部署 拉取MongoDB镜像 docker pull mongo:latest运行MongoDB容器&#xff08;最简单方式&#xff09; docker run --name mongodb -d -p 27017:27017 m…...

如何通过命令提示符(CMD)检查虚拟化是否已启用

想确认 Windows 11 或 10 电脑或笔记本上的虚拟化是否已启用,可以使用命令提示符或 PowerShell 中的 systeminfo 命令。之前已经介绍过使用图形界面的检查方法。在大多数现代系统中,虚拟化默认在 BIOS 中启用,但我们无需打开 BIOS/UEFI 固件菜单即可确认这一点。 虚拟化是一…...

【氮化镓】AlGaN合金中成分相关的辐射响应

2025年,美国宾夕法尼亚州立大学Miaomiao Jin等人基于分子动力学模拟方法,研究了AlGaN合金中成分依赖的辐射响应。研究结果表明,AlGaN合金的辐射损伤特性与铝含量密切相关:随铝含量增加,单次碰撞事件产生的缺陷减少,但由于累积效应,富铝系统更易形成扩展间隙缺陷簇,导致…...

『 测试 』软件测试全流程与Bug管理核心要点解析

文章目录 1 软件测试生命周期2 Bug2.1 Bug 的概念2.2 提出清晰的 Bug2.3 Bug 级别2.4 Bug 的生命周期2.5 作为测试人员与开发人员发生冲突怎么办 1 软件测试生命周期 软件测试贯穿于软件的整个生命周期; 需求分析 测试前需要对需求进行分析, 分析通常站在三个角度去考虑, 即用…...

【springcloud学习(dalston.sr1)】使用Feign实现接口调用(八)

该系列项目整体介绍及源代码请参照前面写的一篇文章【springcloud学习(dalston.sr1)】项目整体介绍&#xff08;含源代码&#xff09;&#xff08;一&#xff09; &#xff08;一&#xff09;Feign的理解 前面文章【springcloud学习(dalston.sr1)】服务消费者通过restTemplat…...

嵌入式Linux Qt开发:2、Qt creator简单配置、Qt Designer使用以及信号槽机制使用

一、前言 Qt creator比较轻量&#xff0c;而且是Qt自带的IDE&#xff0c;基本可以开箱即用&#xff0c;个人使用起来感觉还是比较舒服的&#xff0c;并且其自带的FakeVim也可以做一些Vim的配置&#xff0c;其主界面可以简单配置显示很多的窗口&#xff0c;让开发更加顺畅。 Q…...

【Vue 3 + Vue Router 4】如何正确重置路由实例(resetRouter)——避免“VueRouter is not defined”错误

在使用 Vue 3 和 Vue Router 4 开发中大型 SPA 应用时&#xff0c;我们经常会遇到需要动态添加或删除路由的场景。尤其是在权限控制和用户登出后重置路由的需求中&#xff0c;正确地实现 resetRouter 非常关键。 然而&#xff0c;许多开发者在迁移或初始化项目时&#xff0c;会…...

企业内部通讯,企业级即时通讯软件选择

企业内部的沟通往往涉及大量敏感信息&#xff0c;如商业机密、财务数据、客户信息等。BeeWorks IM即时通讯平台采用全私有化部署&#xff0c;企业可以将服务器部署在自己的数据中心或私有云环境中&#xff0c;确保所有数据的存储和传输都在企业可控的网络内完成。这种部署方式从…...

300. 最长递增子序列

理解最长递增子序列&#xff08;LIS&#xff09;是解决该问题的关键。子序列是从给定数组中按顺序选取的元素序列&#xff0c;例如数组 [1, 2, 3, 4, 5] 的子序列可以是 [2, 3, 4]。需要注意的是&#xff0c;子序列的元素在原数组中不一定是连续的。因此&#xff0c;最长递增子…...

MongoDB入门

1.MongoDB 基本概念详解 2.MongoDB 快速实战 3.MongoDB 核心操作与原理详解 Mongo 是 humongous 的中间部分&#xff0c;在英文里是“巨大无比”的意思。所以 MongoDB 可以翻译 成“巨大无比的数据库”&#xff0c;更优雅的叫法是“海量数据库”。Mongodb是一款非关系型数据库…...

MySQL基础原理

目录 一、MySQL架构 1、四层架构 2、MySQL运行机制 二、MySQL存储引擎 1、不同存储引擎对比 2、InnoDB存储结构 2.1 内存结构 2.2 磁盘结构 3、日志先行策略 3.1 核心思想 3.2 关键组件与流程 3.3 数据安全保证 3.3.1 崩溃恢复 3.3.2 持久性保障 一、MySQL架构 …...