【C++】string介绍

news2024/11/29 8:37:11

String

    • 前言
    • 为什么学习string类?
    • string类的常用接口说明
      • string类对象的常见构造
      • 析构函数
      • 赋值运算符重载
      • [ ] 重载
      • size和length
      • 迭代器
      • 字符串追加
      • 关于容量的函数
      • insert和erase
      • find
      • replace
      • c_str
      • rfind
      • find_first_of
      • find_first_not_of
      • find_last_of
      • substr
      • getline
      • to_string
    • 总结

在这里插入图片描述

前言

这篇博客讲的是STL中的string,作为一名C++程序猿,搞懂STL可是非常重要的。这篇博客就是介绍一些string类中比较常用的函数。但重要的不是这,因为记住所有的函数接口是不可能的,而且重要的函数接口就几个。重要的是让大家培养出查文档的习惯。

string类中成员变量大概长这样,其实就是一个专门放字符串的顺序表,不过是库里面给你提供了一个现成的,不需要你自己去实现:

在这里插入图片描述
这里的size和可不是sizeof()中的那个理解了。size就是有效字符的个数。这里是hello这五个。
上面的图留个印象,可以帮助了解string类。

为什么学习string类?

C语言中,字符串是以’\0’结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数,但是这些库函数与字符串是分离开的,而且底层空间需要用户自己管理,稍不留神可能还会越界访问。不是很方便。

C++中有string类来提供各种各样的函数接口,大大提高了办事效率。

学了数据结构的同学,简单理解string类的话,其实就相当于是存放数据类型为char的顺序表。

函数接口有很多,我这里给出相应的网站供大家参考:STL中string参考文档,里面是英文的,读起来比较费劲的话我也没什么办法。

简单说几点,看不懂没关系,刚接触肯定不能完全理解的,我刚学的时候也不懂。

  1. 字符串是表示字符序列的类。
  2. 标准的字符串类提供了对此类对象的支持,其接口类似于标准字符容器(容器就相当于是数据结构)的接口,但添加了专门用于操作单字节字符字符串的设计特性。
  3. string类是使用char(即作为它的字符类型,使用它的默认char_traits和分配器类型(关于模板的更多信息,请参阅basic_string)。
  4. string类是basic_string模板类的一个实例,它使用char来实例化basic_string模板类,并用char_traits和allocator作为basic_string的默认参数(根于更多的模板信息请参考basic_string)。
typedef basic_string<char, char_traits, allocator> string;
  1. 注意,这个类独立于所使用的编码来处理字节:如果用来处理多字节或变长字符(如UTF-8)的序列,这个类的所有成员(如长度或大小)以及它的迭代器,将仍然按照字节(而不是实际编码的字符)来操作。

关于编码的东西,我直接给出大家一篇文章:刨根问底之——什么是编码?
感兴趣的可以自己看看,不过重点不在这。
要记住一点就是不同的编码中,一个字符可能占用不同的字节数。
比如utf-8一个汉字占用3个字节,utf-16一个汉字占用2个字节,utf-32一个汉字占用4个字节。

  1. 不能操作多字节或者变长字符的序列。

string类的常用接口说明

只讲常用的接口,如果想要自己拓展,可以查看文档,

string类对象的常见构造

先看一下提供了几个构造:
在这里插入图片描述

总共七个构造,很多,但常用的就两三个。上面图中标上序号为1,2,4的记住就行。剩下的我待会给出用法,不需要记,等到写程序的时候需要某种功能的时候,去这里面查查就行。

上例子:

标号为1,2,4的。

1 string();
2 string (const string& str);
4 string (const char* s);

在这里插入图片描述
上面cout能直接打印string类对象,是因为库中也有重载的>>函数。
在这里插入图片描述

标号为3的。

string (const string& str, size_t pos, size_t len = npos);

这个函数功能是从string类对象str中的pos位置开始,往后len个长的字符作为某个string对象的初始值。
在这里插入图片描述
当len超过了能够初始化的有效字符长度或者没有给len值的时候会直接将pos后面全部作为初始化的内容。

len过大:
在这里插入图片描述

未给len(len为缺省参数npos的时候):
在这里插入图片描述
npos的值为-1:
在这里插入图片描述
上面第一句话就说了npos是string类中的一个静态成员常量。固定为-1。

当len以无符号整型size_t接收-1的时候,-1以补码的形式给了len,len会接收到一个非常大的数,有42亿多,就是二进制全1的情况(如果不懂去了解一下整数的存储规则),其实也就相当于是len过大的情况。因为基本不可能出现一个42亿字节大小的字符串,也就是4G左右的大小。

标号为5的

string (const char* s, size_t n);

这个函数是将常量字符串s中前n个字符作为对象初始化的值。
可以这样用:
在这里插入图片描述

也可这样用:
在这里插入图片描述
这里的c_str后面会讲,这里先不说。

标号为6的

string (size_t n, char c);

这个函数将类对象的初始化字符串设置为n个字符c。
在这里插入图片描述
最后一个先不说,用到迭代器了,等会讲迭代器的时候再说。

析构函数

这个没啥讲的,自动调用的东西。

赋值运算符重载

在这里插入图片描述
库里提供了三个,1,2重要,但挨个说一下。

第一个和第二个放一块:

string& operator= (const string& str);
string& operator= (const char* s);

上例子:
在这里插入图片描述
第三个:

string& operator= (char c);

在这里插入图片描述

再说个这个:
在这里插入图片描述
上面的几个初始化,都是调用的构造函数,只有最后一个赋值才是赋值运算符重载,初始化时不管用没用=,都不是调用赋值运算符重载。编译器做了优化。
这个在我前面类和对象中的博客也讲了,不懂的可以看看:类和对象下,看explicit关键字那里就行
最下面那个才是赋值运算符重载。中间蓝色框框住的是调用对应函数时,反汇编中函数的地址,右边绿色的是调用的函数。

[ ] 重载

这个[ ]的重载,对于字符串来说非常有用,可以向数组一样来访问字符串中的任意位置字符。

在这里插入图片描述
例子:

访问任意位置:
在这里插入图片描述

遍历字符串
在这里插入图片描述

可以看到,库里面给了两个,还有一个const修饰的。
意思就是假如用string创建出的const的对象,这个对象是不能被修改的,此时再使用[ ]重载就会调用const修饰的[ ]重载。
来例子:
在这里插入图片描述
此时就只能用来访问了,也就是只读的。
在这里插入图片描述

[ ]会自动检查越界的情况。
在这里插入图片描述

还有一个能随机访问的。
在这里插入图片描述

看下例子:
在这里插入图片描述
不过用起来没有[ ]那么方便,这个也是提供了有const修饰的函数的。
这个at和[ ]的区别就是,用at越界了之后是抛异常,[ ]是程序直接崩溃。

可以看到上面那张图中,for循环中我用到了s1.size()这个函数,讲讲这个。

size和length

在这里插入图片描述
库里提供了这两个。
二者表示的是一个意思,只不过当初STL还没出的时候string已经出了,没出STL的时候用的是length表示string中有效字符的个数,后来除了STL之后,为了跟STL中其他的容器看齐才加的size,因为别的容器中都用的是size来表示元素个数,所以后来也给string中加上了这个size,用来表示有效字符个数。

那么上面的那个例子就好理解了。s1.size()就相当于是字符串的长度。

这里再把lenth给出:
在这里插入图片描述
一模一样。

迭代器

这个就要重点说了。

先看长啥样:
在这里插入图片描述

其中stirng::iterator就是迭代器,s1.begin()就是迭代时的初始位置,s1.end()就是迭代的末尾位置,就相当于是首元素的地址和末尾有效元素的地址。

这个用法是死的,毕竟语法就是这样,没法改,只能记住。

迭代器用起来就像是指针,但是有的容器中iterator用的是指针,有的就不是。
string和vector(顺序表)中的迭代器其实就是指针实现的。
其他的就不是指针了。

但是在string和vector中不习惯用iterator,因为可以直接用[ ]来访问元素,用iterator反而麻烦了。

list/map/set…只能用iterator来访问,用法也是类似的。

这里给出list(链表)中使用iterator的例子:
在这里插入图片描述
注意循环里面的 it++,我刚学的时候老是忘记。
可以看到,我们用C语言写的链表可没有这样的功能,只能是next来找下一个节点。所以说C++学STL是很有必要的,会方便很多。

上面的是正向的迭代器,还有反向的迭代器。
叫做reverse_iterator,对应的头和尾也要改成rbegin和rend。
在这里插入图片描述

不仅有正反向还有const修饰的对象。
在这里插入图片描述
像上面的一样,也是const对象就调用的是const修饰的begin和end。
把例子给出:
正向+const
在这里插入图片描述

反向+const
在这里插入图片描述

如果觉得写迭代器比较麻烦的话,可以用auto来替代它,auto可以自动识别类型,这个在我的第一篇C++博客当中也是说了的,感兴趣的可以看看直接看最后的auto就行 。
还是给例子:
在这里插入图片描述
这时候不管有多长的类型,都可以直接用auto来替换,写起来就比较方便了。

提到auto了就说一下范围for。
给例子:
在这里插入图片描述

看起来很🐂,其实范围for底层就是用迭代器来实现的。

迫于vs2019下反汇编看起来二者相似度不大,但我又我没法展示出来更为相似的地方,但反汇编还是有些地方是相似的。
在这里插入图片描述
在这里插入图片描述
用vs2013可能更好观察一点。

迭代器就说到这。

下面把前面的构造函数的最后一个演示一下:

template <class InputIterator>
  string  (InputIterator first, InputIterator last);

上面的InputIterator first和InputIterator last这两个,其实传的就是迭代器。
在这里插入图片描述
参数中 s1.begin() 和 s1.end() 可加可减。
在这里插入图片描述在这里插入图片描述

字符串追加

有三种用法。
第一种是push_back接口。
第二种是append接口。
第三种是+=接口。
在这里插入图片描述

挨个演示

push_back
在这里插入图片描述
加单个字符
在这里插入图片描述

append
在这里插入图片描述

展示几个,其实和构造函数里的一模一样那几种情况一模一样。

string& append (const string& str);

在这里插入图片描述

string& append (const string& str, size_t subpos, size_t sublen);

这个和构造函数里面的那个很相似。
正常情况:
在这里插入图片描述
sublen太大:
在这里插入图片描述
不给sublen:
在这里插入图片描述

string& append (const char* s)

在这里插入图片描述

演示下迭代器,剩下的两个就不说了,跟构造函数里的用法一样。
在这里插入图片描述

然后就是+=了
在这里插入图片描述
这个用起来会比前两个方便很多。

演示一下:
在这里插入图片描述
所以前两个方法只是为了演示一下,不建议用,真要用的话用+=就行,很方便。

关于容量的函数

前言部分,给了这张图:
在这里插入图片描述
capacity函数可以返回string对象的容量
在这里插入图片描述

预开空间reserve:
在这里插入图片描述
这个函数会将_capacity开到n(或者更大)。不会初始化string对象中的内容。
最后开的_capacity的大小在不同的系统下是不一样的,vs下是这,g++下就不是这个了,会直接开为100。
在这里插入图片描述
里面啥也没放:
在这里插入图片描述

预开空间并初始化resize:

在这里插入图片描述
这个函数会将_capacity开到n,并且会将size的大小改为n,然后将前n个初始化为c,如果没给c,则初始化为0。
在这里插入图片描述
看以看到size变为了100,capacity变为了111。

string的扩容机制在vs2019下有点怪:
我用下面的代码进行string类对象的扩容观察:

string s1;
	cout << "init size::" << s1.size() << endl;
	int capacity = s1.capacity();
	cout << "init capacity::" << s1.capacity() << endl;
	int count = 1000;
	while (count)
	{
		s1 += 'h';
		if (capacity != s1.capacity())
		{
			cout << "capacity changed ::" << s1.capacity() << endl;
			capacity = s1.capacity();
		}
		count--;
	}

在vs2019下:
在这里插入图片描述
可以看到大概是1.5倍的扩。
而且如果用reserve的话,也不是给定的capacity值。
在这里插入图片描述

但是g++下就不一样了:
同样的代码放到g++下:
在这里插入图片描述
运行:
在这里插入图片描述
得到的结果就是100,不是vs2019下的111。

再看一下扩容的情况:
在这里插入图片描述
这里能看到,g++下是2倍的扩的。

就是给大家演示一下,不同编译器下的结果可能是不一样的。

再演示一下resize缩小size的情况:
在这里插入图片描述
上面resize(5),会将hello world!!!中的 world!!!全部劈掉,只剩下hello。
在这里插入图片描述

insert和erase

先看inseret:
在这里插入图片描述

其实参数和上面的构造等非常相似,都跑不开string对象,常量字符串,单个字符。

string& insert (size_t pos, const string& str);
//插string对象

string& insert (size_t pos, const string& str, size_t subpos, size_t sublen);
//插string对象的sobpos位置处的后sublen个字符

string& insert (size_t pos, const char* s);
//插常量字符串

string& insert (size_t pos, const char* s, size_t n);
//插常量字符串的前n个字符

string& insert (size_t pos, size_t n, char c);
//插n个字符c

上面的都是从pos位置插入,只不过是前插。
放一块演示一下:
在这里插入图片描述
剩下的就不说了。

然后是erase
在这里插入图片描述
就说第一个。
从pos位置开始,删除npos个字符。

默认情况下全删
在这里插入图片描述
给上参数:
在这里插入图片描述

insert和erase不建议多用,因为二者都可能存在挪动数据的情况,效率比较低。

find

在这里插入图片描述
上面都是找字符(串),找到了返回下标,找不到返回npos。

//从pos位置开始找str
size_t find (const string& str, size_t pos = 0) const

在这里插入图片描述

//从pos位置开始找s
size_t find (const char* s, size_t pos = 0) const;

在这里插入图片描述

//从pos位置开始找s的前n个字符,很鸡肋,不如第二个
size_t find (const char* s, size_t pos, size_t n) const;

在这里插入图片描述

//从pos位置开始找字符c
size_t find (char c, size_t pos = 0) const;

在这里插入图片描述
这里注意,找的永远是从pos位置往后的第一个c。

给道例题:将下面字符串中空格替换为字符串:::

hello world I am xxx

也就是换成:

hello:::world:::I:::am:::xxx

第一种方法:结合前面的insert和erase

在这里插入图片描述
具体的就不讲了,注意画图理解。

第二种方法:空间换时间
在这里插入图片描述

还有一个函数replace,听名字就是替换。

replace

在这里插入图片描述

string& replace (size_t pos,  size_t len,  const string& str);

将string对象的pos位置往后的len个字符替换为str。

给几个例子:
0位置往后的2个字符换为tmp
在这里插入图片描述
0位置往后的3个字符换为tmp
在这里插入图片描述
0位置往后的1个字符换为tmp
在这里插入图片描述
0位置往后的2个字符换为tmp
在这里插入图片描述

然后也能用这个来搞前面那道例题了:
在这里插入图片描述

然后replace的就不讲了,感兴趣的自己可以查文档。

但是如果想要找到最后一个单词呢?
可以用rfind。

c_str

这个比较有用,就是将string类对象中的字符串以常量字符串的形式返回。也就是将C++中的类对象转换为C中的常量字符串。
在这里插入图片描述
其实二者没什么区别。区别都是C++和C的语法使用上的。
在这里插入图片描述
但是有一个场景要注意:
C++中打印字符串是以字符串本身的size来决定打印多少的。
而C中的打印是以’\0’为结束标志的。
在这里插入图片描述
就记住这个就行。

rfind

这个就是倒过来找的意思。reverse find。
在这里插入图片描述

然后就可以做上面的那道题了:
在这里插入图片描述

还是不细讲,用的时候查文档就行。

find_first_of

这个函数名字起得不好,应该叫find_any_of,这个函数用法是找到字符串里任意一个字符第一次出现的位置。
在这里插入图片描述
例子:
在这里插入图片描述
这里的2就是hello中的第一个 l 的下标。
在这里插入图片描述
在这里插入图片描述
这里的用法是从第五个位置开始找,找到oI中的任意一个。

find_first_not_of

找到对象中第一个没有出现字符串中字符的位置。
在这里插入图片描述

在这里插入图片描述

不细讲。

find_last_of

找到最后出现的。
在这里插入图片描述
其实就是倒着找。
在这里插入图片描述

substr

这个函数是帮忙取出子串的。
在这里插入图片描述

直接给例子:
在这里插入图片描述
取出下标为3位置处的后4个字符

再来个例子:将网址的协议、域名、后面的分开打印出来。

网址都是死格式:

protocal://hostname:portname/pathname/?search#hash
就先找://,搞成字串
再找/,搞成字串
后面的再搞成字串就OK了

我就以我现在所编写的网址为例:
在这里插入图片描述

getline

还有一个比较重要的东西,就是getline,相当于C语言中的fgets。
就是获取一行字符串。
在这里插入图片描述
有的同学可能会说为啥不直接用cin呢?
看:
在这里插入图片描述
cin和scanf一样,遇到空格或者回车就会当成是字符串就结束了。

而getline和fgets(gets)就是C++和C中能够读取包含空格字符串的两个函数。

所以这里用getline就好了。
在这里插入图片描述

to_string

这个也比较好用。

将数字转成字符串。
在这里插入图片描述
这些所有参数的类型都能转换成string类型。
在这里插入图片描述
C语言中的atoi没有这个好用。

还有字符串转数字的。
在这里插入图片描述
在这里插入图片描述

总结

剩下的没什么好讲的了,其实最常用的就是[] += 迭代器 size这几个常用点,剩下的留个印象就行,没必要全记住,其他的想用的时候忘了查文档就行。

到此结束。。。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/576467.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

linux+onenet可视化(图形化步骤)

文章目录 一、ONENET项目搭建1.1 ONENET注册1.2 创建产品与设备1.3 添加数据流 二、可视化配置 OneNET是由中国移动打造的PaaS物联网开放平台。平台能够帮助开发者轻松实现设备接入与设备连接&#xff0c;快速完成产品开发部署&#xff0c;为智能硬件、智能家居产品提供完善的物…

孤儿僵尸守护进程

孤儿僵尸守护进程 1. 孤儿进程&#xff1a;2. 僵尸进程&#xff1a;3. 守护进程&#xff1a;(重点) 1. 孤儿进程&#xff1a; 父进程退出,还没退出的子进程就变成了孤儿进程 不要怕,还有爷爷进程init: 孤儿进程将被init进程所收养&#xff0c;并由init进程对它们完成状态收集…

认识HTTP协议---2

hi,大家好,今天继续为大家带来HTTP协议相关的知识 认识请求报头 &#x1f440;1.header &#x1f440;2.Content-Type,Content-Length &#x1f440;3.User-Agent &#x1f440;4.Referer &#x1f440;5.Cookie机制 小复习 进入正题之前我们先回忆一下之前的知识 http报…

牛客小白月赛73

A&#xff1a;最小的数字 A-最小的数字_牛客小白月赛73 (nowcoder.com) #include<bits/stdc.h> #define endl \n #define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); #define int long long using namespace std; int n, m, k, A, B, N, M, K; const int ma…

22种transforms数据预处理方法

来源&#xff1a;投稿 作者&#xff1a;阿克西 编辑&#xff1a;学姐 建议搭配视频学习↓ 视频链接&#xff1a;https://ai.deepshare.net/detail/p_5df0ad9a09d37_qYqVmt85/6 1.数据增强&#xff08;data augmentation&#xff09; 数据增强又称为数据增广&#xff0c;数据…

docker安装单机nacos、rocketmq、reids、xxl-job、minio、elasticsearch、kibana、gogs、nginx

目录在右侧中部 启动容器报错 直接删除那个name后边的就可以 安装nacos 首先需要拉取对应的镜像文件&#xff1a;docker pull nacos/nacos-server 挂载目录&#xff1a; mkdir -p /mydata/nacos/logs/ #新建logs目录mkdir -p /mydata/nacos/init.d/ …

最小二乘估计心得

基本思想 存在一组观察值 ( x i , y i ) (x_i, y_i) (xi​,yi​)&#xff0c;其中 y i y_i yi​和 x i x_i xi​之间满足一定的线性关系&#xff0c;如 y a 0 f 0 ( x ) a 1 f 1 ( x ) . . . a m − 1 f m − 1 ( x ) y a_0 f_0(x) a_1 f_1(x) ... a_{m-1} f_{m-1}(x…

改进YOLOv5/YOLOv8:结合华为诺亚VanillaNet Block模块:深度学习中极简主义的力量

YOLOv5结合华为诺亚VanillaNet Block模块 介绍核心代码加入YOLOv5yaml文件:运行结果论文: VanillaNet: the Power of Minimalism in Deep Learning 代码: https://link.zhihu.com/?target=https%3A//github.com/huawei-noah/VanillaNet 介绍 基础模型的核心是 "更多…

Terra-Luna归零一年后:信任重建、加密未来路在何方?

本月既是Terra-Luna归零的一周年&#xff0c;也是FTX崩溃的第六个月&#xff0c;而这两个事件分别代表着2022年加密市场连环爆的开始与高潮&#xff0c;引发了加密行业15年历史上最可怕的生存危机。 尽管今年市场行情有所回暖&#xff0c;比特币开年至今涨幅70%&#xff0c;以太…

【办公类-19-04】办公中的思考——幼儿姓名笔画数统计(单字、全名字)

结果展示--笔画数统计 背景需求 中6班幼儿都能够书写学号&#xff08;基本没有镜像了&#xff09;&#xff0c;于是我开始尝试让幼儿熟悉自己的“姓氏”&#xff0c;并书写姓氏&#xff08;单字&#xff09;。4位幼儿能够默写全名&#xff0c;3位幼儿可以默写名字中的某一个字…

3*5差值结构参照1分类迭代次数比较

( A, B )---3*30*2---( 1, 0 )( 0, 1 ) 让网络的输入有3个节点&#xff0c;训练集AB各由5张二值化的图片组成&#xff0c;让A中有6个1&#xff0c;B中全是1&#xff0c;排列组合A &#xff0c;统计迭代次数并排序。共收集到了181个不同的迭代次数&#xff0c;其中有4个 A-B 迭…

创建web后端程序(servlet程序搭建)

目录 一、Servlet概述 二、创建servlet程序 1.创建类继承HttpServlet 2.重写HttpServlet类中 service、destroy、init方法 3.重新启动服务器 一、Servlet概述 Server Applet的简称&#xff0c;用Java编写的服务器端的程序。它运行在web服务器中&#xff0c;web服务器负责…

路径规划算法:基于回溯搜索优化的路径规划算法- 附代码

路径规划算法&#xff1a;基于回溯搜索优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于回溯搜索优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用智能优化…

Android逆向学习之Frida逆向与抓包实战学习笔记(持续更新中)

学习资料:《安卓Frida逆向与抓包实战》陈佳林/著 文章目录 基础环境第三章 Frida逆向入门之Java层hook3.1 frida基础3.1.3frida基础知识frida存在两种操作模式frida操作App的方式有两种 3.1.4Frida IDE配置 3.2 frida脚本入门3.2.1 frida脚本的概念3.2.2 Java层hook基础1.hook…

续---初识HTML!!!(结束篇)

续———初识HTML&#xff01;&#xff01;&#xff01; 一、表单 1.表单的作用 关于表单的作用&#xff1a;表单最大的作用就是收集用户的信息&#xff0c;用户填写表单&#xff0c;点击提交数据给服务器。 2.如何画出表单&#xff1f; 在HTML中我们采用form标签来画一个…

2023 (ICPC) Jiangxi Provincial Contest -- Official Contest

A. Drill Wood to Make Fire 输出即可 #include<bits/stdc.h> #define int long long #define x first #define y second using namespace std; const int N1100; typedef pair<int,int>pii;int m,n; int a[N][N];void solve() {int s,v,n;cin>>n>>s&…

Kali-linux Arpspoof工具

Arpspoof是一个非常好的ARP欺骗的源代码程序。它的运行不会影响整个网络的通信&#xff0c;该工具通过替换传输中的数据从而达到对目标的欺骗。本节将介绍Arpspoof工具的 使用。 9.8.1 URL流量操纵攻击 URL流量操作非常类似于中间人攻击&#xff0c;通过目标主机将路由流量注…

腾讯T4大牛整理的SpringBoot文档,覆盖你认知中的所有操作

SpringBoot目前的使用已经很普遍了&#xff0c;实际的项目中&#xff0c;我们需要集成各种的插件支持&#xff0c;不仅如此&#xff0c;还有很多可能我们平时不知道&#xff0c;但是很方便的操作。pdf里面的东西还是比较全面的。 1、关于文档 2、获得帮助 3、第一 步 4、使…

【Docker】Docker最近这么火,它到底是什么

前言 Docker 是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。 &#x1f4d5;作者简介&#xff1a;热…

RMP软件管理、YUM源、磁盘管理。

1、RPM软件管理 1> 通过rpm安装vsftpd软件。 去官网找到xsftpdx86的链接。 2> 查询vsftpd软件包的信息。 3> 卸载软件包vsftpd。 2、YUM软件管理 1> 挂载本地光盘&#xff0c;配置yum源为rhel.repo。 2> 通过yum来安装traceroute。 3> 使用yum查询ifconfig命…