【C++】string类的基础操作
💗个人主页💗
⭐个人专栏——C++学习⭐
💫点击关注🤩一起学习C语言💯💫
目录
导读
1. 基本概述
2. string类对象的常见构造
3. string类对象的容量操作
4. string类对象的访问及遍历操作
5. 迭代器
6. string类对象的修改操作
6.1 基本修改操作
6.2 c_str()函数
6.3 find + npos、rfind和substr
7. 输入输出流、关系运算符以及getline
7.1输入输出流
7.2 关系运算符
7.3 getline
导读
今天我们来学习在C++中string类的常见用法,比如构造、容量操作、遍历访问以及一些修改操作。
1. 基本概述
C++中的string类是一个用于处理字符串的标准库类。它提供了一些常用的操作和函数,使得字符串的处理更加方便和高效。
-  
字符串的表示:string类可以表示一个字符序列,可以包含任意长度的字符。字符串可以由字符数组或者字符串字面值初始化。
 -  
字符串的操作:string类提供了一系列操作函数,包括字符串的连接、复制、查找、比较等。可以通过这些操作函数对字符串进行各种操作。
 -  
字符串的长度:string类提供了成员函数length()和size()来获取字符串的长度,即字符的个数。
 -  
字符串的访问:string类的字符可以通过下标操作符[]来访问,也可以通过at()函数来访问。同时,还可以通过迭代器来遍历字符串。
 -  
字符串的修改:string类的字符可以通过下标操作符[]进行修改,也可以通过成员函数append()、insert()、erase()等进行修改。
 -  
字符串的输入输出:string类可以通过输入输出流进行字符串的输入和输出,可以参与标准的输入输出操作。
 -  
字符串的比较:string类提供了比较操作符==、!=、>、<、>=、<=来比较字符串的大小。
 
总之,string类是C++中用来处理字符串的一个非常重要的类,提供了丰富的操作函数和方法,方便了字符串的处理和操作。
2. string类对象的常见构造
| 函数名称 | 功能说明 | 
|---|---|
| string() | 构造空的string类对象,即空字符串 | 
| string(const char* s) | 用C-string来构造string类对象 | 
| string(size_t n, char c) | string类对象中包含n个字符c | 
| string(const string&s) | 拷贝构造函数 | 
void test_string1()
{string s0;			//使用默认构造函数构造一个空的string对象s0。string s1("hello world");//使用字符串字面值构造一个string对象s1string s2(s1);//使用s1进行拷贝构造,构造一个新的string对象s2string s3(s1, 5, 3);//构造一个从s1的第5个字符开始的长度为3的子串,构造的string对象为s3。string s4(s1, 5, 10);//造一个从s1的第5个字符开始的长度为10的子串,string s5(s1, 5);//构造一个从s1的第5个字符开始的子串,直到字符串末尾,cout << s0 << endl;cout << s1 << endl;cout << s2 << endl;cout << s3 << endl;cout << s4 << endl;cout << s5 << endl;string s6(10, '#');//使用重复10次的字符'#'构造一个string对象s6。cout << s6 << endl;s0 = s6;//将s6的值赋给s0cout << s0 << endl;
}
int main()
{test_string1();return 0;
} 
 
3. string类对象的容量操作
| 函数名称 | 功能说明 | 
|---|---|
| size | 返回字符串有效字符长度 | 
| length | 返回字符串有效字符长度 | 
| capacity | 返回空间总大小 | 
| empty | 检测字符串释放为空串,是返回true,否则返回false | 
| clear | 清空有效字符 | 
| reserve | 为字符串预留空间** | 
| resize | 将有效字符的个数该成n个,多出的空间用字符c填充 | 
void capacity_operations()
{string str = "hello world";cout << "Size of the string: " << endl;cout << str.size() << endl;cout << "Length of the string: " << endl;cout << str.length() << endl;str.resize(5); // 修改字符串的长度为5cout << "After resizing the string: " << endl;cout << str << endl;str.resize(10, 'a'); // 修改字符串的长度为10,并用字符 'a' 填充剩余部分cout << "After resizing and filling the string: " << endl;cout << str << endl;str.clear(); // 清空字符串cout << "After clearing the string: " << endl; cout << str << endl;cout << "Is the string empty? " << endl;cout << (str.empty() ? "Yes" : "No") << endl;cout << "Capacity of the string: " << endl;cout << str.capacity() << endl;str.reserve(20); // 设置容量为20cout << "New capacity of the string: " << endl;cout << str.capacity() << endl;
}int main()
{capacity_operations();return 0;
} 

注意:
- size()与length()方法底层实现原理完全相同,引入size()的原因是为了与其他容器的接口保持一 致,一般情况下基本都是用size()。
 - clear()只是将string中有效字符清空,不改变底层空间大小。
 - resize(size_t n) 与 resize(size_t n, char c)都是将字符串中有效字符个数改变到n个,不同的是当字 符个数增多时:resize(n)用0来填充多出的元素空间,resize(size_t n, char c)用字符c来填充多出的 元素空间。注意:resize在改变元素个数时,如果是将元素个数增多,可能会改变底层容量的大 小,如果是将元素个数减少,底层空间总大小不变。
 - reserve(size_t res_arg=0):为string预留空间,不改变有效元素个数,当reserve的参数小于 string的底层空间总大小时,reserver不会改变容量大小。
 
在这里可能有小伙伴们注意到了
为什么capacity返回的容量会比我们实际的多一些?
capacity() 函数返回当前字符串的容量,即字符串在不重新分配内存的情况下可以容纳的字符数。容量包括字符串实际存储的字符数以及额外的预留空间。
预留空间是为了避免频繁地进行内存重新分配操作,当字符串的空间不足时,string 类会自动分配一块更大的内存空间,并将原来的字符拷贝到新的内存中。
需要注意的是,
capacity()返回的容量不一定和实际分配的内存大小相等。实际分配的内存大小可以通过sizeof(string)来获得,这个大小包括了除了存储字符之外的其他开销,比如指针、长度信息等。
4. string类对象的访问及遍历操作
| 函数名称 | 功能说明 | 
|---|---|
| operator[ ] | 返回pos位置的字符,const string类对象调用 | 
| begin+ end | begin获取一个字符的迭代器 + end获取最后一个字符下一个位置的迭代器 | 
| rbegin + rend | begin获取一个字符的迭代器 + end获取最后一个字符下一个位置的迭代器 | 
| 范围for | C++11支持更简洁的范围for的新遍历方式 | 
void access_string()
{string str = "hello world";// 使用下标访问单个字符cout << "Using index access:";for (size_t i = 0; i < str.size(); i++){cout << str[i] << " ";}cout << endl;// 使用迭代器访问单个字符cout << "Using iterator access:";for (auto it = str.begin(); it != str.end(); ++it){cout << *it << " ";}cout << endl;// 使用范围-based for循环遍历字符cout << "Using range-based for loop:";for (char ch : str){cout << ch << " ";}cout << endl;
}int main()
{access_string();return 0;
} 

operator[]是C++中用于访问容器或数组中元素的运算符。
使用
operator[]访问字符串中的字符时,如果索引越界,行为是未定义的。因此,在使用operator[]之前,应该确保索引在有效范围内。可以使用size()函数获取字符串的长度,并将索引与长度进行比较来确保不越界。
rbegin() 和 rend() 是用于反向遍历字符串的迭代器 
rbegin()函数返回一个指向字符串最后一个字符的逆向迭代器,即反向起始迭代器,而rend()函数返回一个指向字符串第一个字符的前一个位置的逆向迭代器,即反向结束迭代器。
范围for循环是C++11引入的一种语法糖,用于迭代一个范围内的元素。 
我们使用范围
for循环来遍历字符串str中的字符。在每次迭代时,当前字符被赋值给变量ch,然后我们将其输出。范围
for循环会自动处理迭代器的初始化和结束条件,并且会在循环内部按顺序遍历范围内的所有元素。
5. 迭代器
迭代器是一种用于访问容器(如数组、链表、字符串等)中元素的对象。它类似于指针,可以用来遍历容器中的元素,并进行读取、修改等操作。
在 C++ 中,string 类也提供了迭代器来遍历字符串中的每个字符。
string类提供了多种类型的迭代器,包括正向迭代器、反向迭代器和常量迭代器。
int main() 
{string str = "Hello, World!";// 正向迭代器string::iterator it;for (it = str.begin(); it != str.end(); ++it) {cout << *it; // 输出当前字符}cout << endl;// 反向迭代器string::reverse_iterator rit;for (rit = str.rbegin(); rit != str.rend(); ++rit) {cout << *rit; // 输出当前字符}cout << endl;// 使用常量迭代器遍历字符串string::const_iterator its;for (its = str.begin(); its != str.end(); ++its) {cout << *its << " ";}cout << endl;return 0;
} 

使用常量迭代器可以确保在遍历字符串时不会修改字符串的内容。常量迭代器可以通过使用const_iterator或const_reverse_iterator类型来声明。
6. string类对象的修改操作
| 函数名称 | 功能说明 | 
|---|---|
| push_back | 在字符串后尾插字符c | 
| append | 在字符串后追加一个字符串 | 
| operator+= | 在字符串后追加字符串str | 
| c_str | 返回C格式字符串 | 
| find + npos | 从字符串pos位置开始往后找字符c,返回该字符在字符串中的位置 | 
| rfind | 从字符串pos位置开始往前找字符c,返回该字符在字符串中的位置 | 
| substr | 在str中从pos位置开始,截取n个字符,然后将其返回 | 
6.1 基本修改操作
int main() 
{string str = "Hello";// 使用赋值运算符修改字符串的内容str = "Hello World";cout << str << endl;//使用push_back函数在字符串的末尾添加一个字符。str.push_back('?');cout << str << endl;// 使用+=运算符进行字符串追加str += "!";cout << str << endl;// 使用append函数进行字符串追加str.append(" Welcome");cout << str << endl;// 使用insert函数在指定位置插入字符或子字符串str.insert(6, " to");cout << str << endl;// 使用erase函数删除指定位置的字符或子字符串str.erase(11, 8);cout << str << endl;// 使用replace函数替换指定位置的字符或子字符串str.replace(6, 2, "everybody");cout << str << endl;//使用assign函数将字符序列赋值给字符串对象str.assign(" xxxxx");cout << str << endl;//将字符序列的一部分赋值给字符串对象str.assign("Hello World", 5);cout << str << endl;return 0;
} 

insert/erase/replace能少用就要少用,因为基本都要挪动数据,效率不高。
6.2 c_str()函数
c_str()是string类的一个成员函数,用于返回一个指向string对象中字符数组的指针。一般情况下,我们使用c_str()来将string对象转换为C风格字符串。
int main() 
{string str = "Hello, World!";const char* cstr = str.c_str();cout << cstr << endl;return 0;
} 

6.3 find + npos、rfind和substr
find+npos:
find函数用于在字符串中查找指定子串的位置。npos是string类的静态成员常量,它的值是一个特殊的无效位置(通常为-1)。
int main() 
{string str = "Hello, World!";string subStr = "World";size_t found = str.find(subStr);if (found != string::npos) {cout << "子字符串所在位置: " << found << endl;}else {cout << "没有找到" << endl;}return 0;
}
 

需要注意的是,npos的值是一个特殊值,可以用于与find函数的返回值比较,以判断子串是否找到。在大多数情况下,npos的值是一个非法的位置 。
rfind 函数:
用于在字符串中从后往前查找子串的位置。rfind函数返回子串最后一次出现的位置,如果未找到则返回一个特殊的值npos。
int main() 
{string str = "Hello, Hello, World!";size_t found = str.rfind("Hello");if (found != string::npos) {cout << "Last occurrence found at position: " << found << endl;}else {cout << "Substring not found." << endl;}return 0;
} 

substr函数:
substr函数用于从一个字符串中提取子串。
它接受两个参数:开始位置和要提取的子串的长度。
int main() 
{string str = "Hello, World!";// 提取从位置7开始的子串string sub1 = str.substr(7);cout << "Substring 1: " << sub1 << endl;// 提取从位置0开始长度为5的子串string sub2 = str.substr(0, 5);cout << "Substring 2: " << sub2 << endl;return 0;
} 

注意:
如果提供的位置超出了字符串的长度,或者指定的长度超出了可用的子串长度,都会导致未定义行为。因此,在使用substr函数时需要确保提供的参数符合字符串的有效范围。
7. 输入输出流、关系运算符以及getline
| 函数 | 功能说明 | 
|---|---|
| operator>> | 输入运算符重载 | 
| operator<< | 输出运算符重载 | 
| getline | 获取一行字符串 | 
| relational operators | 大小比较 | 
7.1输入输出流
operator>>和operator<<都是C++中的重载运算符,用于对输入流和输出流进行操作。
operator>>是输入流运算符,用于从输入流中读取数据。
istream& operator>>(istream& is, T& value);
 
其中,
is是输入流对象,value是要读取数据的变量或对象。operator>>函数返回一个输入流对象,并将读取到的数据存储到value中。
operator<<是输出流运算符,用于向输出流中写入数据。
ostream& operator<<(ostream& os, const T& value);
 
其中,
os是输出流对象,value是要写入输出流中的变量或对象。operator<<函数返回一个输出流对象。
这两个运算符可以重载为类成员函数或非成员函数。当重载为类成员函数时,第一个参数是隐式的,表示调用运算符的对象;当重载为非成员函数时,可以在函数的参数列表中指定输入/输出流对象。
class Point 
{
public:int x, y;
};//非成员函数
ostream& operator<<(ostream& os, const Point& p) 
{os << "(" << p.x << ", " << p.y << ")";return os;
}//非成员函数
istream& operator>>(istream& is, Point& p) 
{is >> p.x >> p.y;return is;
}int main() 
{Point p;cout << "Enter x and y coordinates: ";cin >> p;cout << "You entered: " << p << endl;return 0;
}
 

operator<<被重载为非成员函数,用于将Point对象的坐标输出到输出流中;operator>>也被重载为非成员函数,用于从输入流中读取坐标并存储到Point对象中。在main()函数中,程序首先提示用户输入坐标,然后使用operator>>运算符将读取到的坐标存储到Point对象p中,最后使用operator<<运算符将p对象的值输出到屏幕上。
7.2 关系运算符
在C++中,string 类型可以使用关系运算符(relational operators)进行比较。以下是string 类型可用的关系运算符:
==:检查两个字符串是否相等。!=:检查两个字符串是否不相等。<:检查第一个字符串是否小于第二个字符串(按字典顺序比较)。>:检查第一个字符串是否大于第二个字符串(按字典顺序比较)。<=:检查第一个字符串是否小于等于第二个字符串(按字典顺序比较)。>=:检查第一个字符串是否大于等于第二个字符串(按字典顺序比较)。
int main() 
{string str1 = "hello";string str2 = "world";if (str1 == str2) {cout << "The strings are equal" << endl;}else if (str1 < str2) {cout << "str1 is less than str2" << endl;}else {cout << "str1 is greater than str2" << endl;}return 0;
}
 

7.3 getline
getline 函数,用于从输入流(如键盘、文件)中读取一行字符串。
getline(istream& input_stream, string& str, char delimiter);
 
input_stream是输入流,可以是cin(键盘输入)或ifstream(文件输入)等。str是用于存储读取的字符串的变量,它必须是string类型的引用。delimiter是一个可选参数,表示行结束的分隔符,默认值为换行符\n。
int main() 
{string str;cout << "Enter a line of text: ";getline(cin, str);cout << "You entered: " << str << endl;return 0;
} 

相关文章:
【C++】string类的基础操作
💗个人主页💗 ⭐个人专栏——C学习⭐ 💫点击关注🤩一起学习C语言💯💫 目录 导读 1. 基本概述 2. string类对象的常见构造 3. string类对象的容量操作 4. string类对象的访问及遍历操作 5. 迭代器 6.…...
Java项目:40 springboot月度员工绩效考核管理系统009
作者主页:源码空间codegym 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 本系统的功能分为管理员和员工两个角色 管理员的功能有: (1)个人中心管理功能,添加管理员账号…...
opengl 学习(三)-----着色器
着色器 分类demo效果解析教程 分类 OPengl C demo #include "glad/glad.h" #include "glfw3.h" #include <iostream> #include <cmath> #include <vector>#include <string> #include <fstream> #include <sstream>…...
电销平台架构的演变与升级
简介 信也科技电销平台承载了公司400多坐席的日常外呼任务,随着公司业务规模不断增长,业务复杂度不断提升,营销模式需要多样化,营销流程需要更加灵活。为了更好地赋能业务、提高客户转化率,电销平台不断升级优化&#…...
轻薄蓝牙工牌室内人员定位应用
在现代化企业管理的背景下,轻薄蓝牙工牌人员定位应用逐渐崭露头角,成为提升企业效率和安全性的重要工具。本文将从轻薄蓝牙工牌的定义、特点、应用场景以及未来发展趋势等方面,对其进行全面深入的探讨。 一、轻薄蓝牙工牌的定义与特点 轻薄…...
好物周刊#46:在线工具箱
https://github.com/cunyu1943 村雨遥的好物周刊,记录每周看到的有价值的信息,主要针对计算机领域,每周五发布。 一、项目 1. twelvet 一款基于 Spring Cloud Alibaba 的权限管理系统,集成市面上流行库,可以作用为快…...
20240306-1-大数据的几个面试题目
面试题目 1. 相同URL 题目: 给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url? 方案1:估计每个文件的大小为50G64320G,远远大于内存限制的4G。所以…...
Vue中如何处理用户权限?
在前端开发中,处理用户权限是非常重要的一个方面。Vue作为一种流行的前端框架,提供了很多便捷的方式来管理用户权限。本文将介绍一些Vue中处理用户权限的方法 1. 使用路由守卫 Vue Router提供了一个功能强大的功能,即导航守卫(N…...
【STM32】HAL库 CubeMX教程---基本定时器 定时
目录 一、基本定时器的作用 二、常用型号的TIM时钟频率 三、CubeMX配置 四、编写执行代码 实验目标: 通过CUbeMXHAL,配置TIM6,1s中断一次,闪烁LED。 一、基本定时器的作用 基本定时器,主要用于实现定时和计数功能…...
2024年最新整理腾讯云学生服务器价格、续费和购买流程
2024年腾讯云学生服务器优惠活动「云校园」,学生服务器优惠价格:轻量应用服务器2核2G学生价30元3个月、58元6个月、112元一年,轻量应用服务器4核8G配置191.1元3个月、352.8元6个月、646.8元一年,CVM云服务器2核4G配置842.4元一年&…...
【QT】重载的信号槽/槽函数做lambda表达式
重载的信号槽 函数指针: int fun(int a,long b) int (*funp)(int, long) fun; 实现回调函数就需要函数指针 信号重载 派生类槽函数发送两个信号 派生类给父类发两个信号 void (SubWidget::*mysigsub)() &SubWidget::sigSub;connect(&subw,mysigsub,t…...
C++之类(一)
1,封装 1.1 封装的引用 封装是C面向对象三大特性之一 封装的意义: 将属性和行为作为一个整体,表现生活中的事物 将属性和行为加以权限控制 1.1.1 封装意义一: 在设计类的时候,属性和行为写在一起,表…...
【工具类】repo是什么,repo常用命令,repo和git和git-repo的关系
1. repo 1. repo 1.1. repo是什么1.2. 安装1.3. repo 命令 1.3.1. repo help1.3.2. repo init1.3.3. repo sync1.3.4. repo upload1.3.5. repo start1.3.6. repo forall 1.4. mainfest 文件1.5. git-repo简介(非android repo)1.6. 参考资料 1.1. repo是什么 Repo 是一个 go…...
Java中可以实现的定时任务策略
Java中可以实现的定时任务策略 文章目录 Java中可以实现的定时任务策略自定义独立线程JDK提供的调度线程池-**ScheduledExecutorService**内核是Spring的Task执行调度quartz调度 #mermaid-svg-mQ9rPqk0Ds3ULnvD {font-family:"trebuchet ms",verdana,arial,sans-seri…...
【目标分类图像增强方法】
图像增强方法及其原理 目标分类图像增强是一种用于提高深度学习模型泛化能力的技术,通过在训练过程中对原始图像进行各种变换来增加模型所见数据的多样性。以下是几种常见的图像增强方法及其原理: 几何变换: 旋转(Rotation&#…...
游戏盾如何应对微商城网站DDoS攻击
游戏盾如何应对微商城网站DDoS攻击?随着电子商务的快速发展,微商城网站已成为众多商家开展在线业务的重要平台。然而,与此同时,网络安全威胁也愈发严重。其中,分布式拒绝服务(DDoS)攻击是一种常…...
安卓手机如何使用JuiceSSH实现公网远程连接本地Linux服务器
文章目录 1. Linux安装cpolar2. 创建公网SSH连接地址3. JuiceSSH公网远程连接4. 固定连接SSH公网地址5. SSH固定地址连接测试 处于内网的虚拟机如何被外网访问呢?如何手机就能访问虚拟机呢? cpolarJuiceSSH 实现手机端远程连接Linux虚拟机(内网穿透,手机端连接Linux虚拟机) …...
钉钉群内自定义机器人发送消息功能实现
文章目录 钉钉群内自定义机器人发送消息功能实现1、设置webhook自定义机器人2、查看官方文档,使用open api3、编写业务代码4、发送成功结果如下 钉钉群内自定义机器人发送消息功能实现 1、设置webhook自定义机器人 设置关键词 添加完成后,获得改机器人的…...
网站维护3年15000元,贵不贵?市场价多少
一般来说,给公司做好网站上线之后,网站就进入了运维期间,某功力公司给客户收费3年15000元网站运维费用,到底高不高呢? 首先,来看看网站运维都有哪些项目 网站运维涉及多个项目和任务,包括但不限…...
ROS 2基础概念#5:执行器(Executor)| ROS 2学习笔记
在ROS 2中,Executor是一个核心概念,负责管理节点(Node)中的回调函数,如订阅消息的回调、服务请求的回调、定时器回调等。Executor决定了何时以及如何执行这些回调,从而在ROS 2系统中实现异步编程。 ROS 2 …...
XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...
Java 语言特性(面试系列2)
一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...
从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...
Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...
大模型多显卡多服务器并行计算方法与实践指南
一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...
DingDing机器人群消息推送
文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人,点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置,详见说明文档 成功后,记录Webhook 2 API文档说明 点击设置说明 查看自…...
ubuntu22.04 安装docker 和docker-compose
首先你要确保没有docker环境或者使用命令删掉docker sudo apt-get remove docker docker-engine docker.io containerd runc安装docker 更新软件环境 sudo apt update sudo apt upgrade下载docker依赖和GPG 密钥 # 依赖 apt-get install ca-certificates curl gnupg lsb-rel…...
怎么开发一个网络协议模块(C语言框架)之(六) ——通用对象池总结(核心)
+---------------------------+ | operEntryTbl[] | ← 操作对象池 (对象数组) +---------------------------+ | 0 | 1 | 2 | ... | N-1 | +---------------------------+↓ 初始化时全部加入 +------------------------+ +-------------------------+ | …...
【若依】框架项目部署笔记
参考【SpringBoot】【Vue】项目部署_no main manifest attribute, in springboot-0.0.1-sn-CSDN博客 多一个redis安装 准备工作: 压缩包下载:http://download.redis.io/releases 1. 上传压缩包,并进入压缩包所在目录,解压到目标…...
