【C++STL详解 —— string类】

【C++STL详解 —— string类】

  • C++STL详解 —— sring类
  • 一、string的定义方式
  • 二、string的插入
  • 三、string的拼接
  • 四、string的删除
  • 五、string的查找
  • 六、string的比较
  • 七、string的替换
  • 八、string的交换
  • 九、string的大小和容量
  • 十、string中元素的访问
  • 十一、string中运算符的使用
  • 十二、string中与迭代器相关的函数
  • 十三、string与字符串之间的转换
  • 十四、string中子字符串的提取
  • 十五、string中的getline函数

C++STL详解 —— sring类

在这里插入图片描述

一、string的定义方式

string类 实现了多个构造函数的重载,常用的构造函数如下:

	string s();								//构造一个空字符串string s(const char* s);				//复制s所指向的字符序列string s(const char* s, size_t n);		//复制s所指向的字符序列的前n个字符string s(size_t, char c);				//生成n个c字符的字符串string s(const string & str);			//生成str的复制string s(const string & str, size_t pos, size_t len = npos);	//复制str中字符位置pos开始并且跨越len个字符的部分

使用示例:
在这里插入图片描述
在这里插入图片描述

二、string的插入

1、使用push_back进行尾插

void push_back (char c);

使用示例:

int main()
{string s1;s1.push_back('C');s1.push_back('S');s1.push_back('D');s1.push_back('N');return 0;
}

在这里插入图片描述


2、使用insert插入

string& insert (size_t pos, const string& str);	//在pos位置上插入string对象
string& insert (size_t pos, const char* s);		//在pos位置上插入字符串
iterator insert (iterator p, char c);			//在迭代器p的位置上插入字符c
#include <iostream>
#include <string>
using namespace std;
int main()
{string s("C"); //C//insert(pos, str)在pos位置插入字符串strs.insert(1, "S"); //CS//insert(pos, string)在pos位置插入string对象string t("D");s.insert(2, t); //CSD//insert(pos, char)在pos位置插入字符chars.insert(s.end(), 'N'); //CSDNcout << s << endl; //CSDNreturn 0;
}

在这里插入图片描述


三、string的拼接

使用append函数完成string的拼接:

string& append (const string& str);		//在字符串尾部追加字符串str
string& append (const char* s);			//在字符串尾部追加C风格的字符串s
string& append (size_t n, char c);		//将字符c重复追加n次到调用该函数的字符串对象的尾部。

使用示例:

	string s1("Hello");string s2("World");//"Hello"s1.append(s2);		//在字符串尾部追加字符串str//"Hello World"s1.append(" ");		//在字符串尾部追加C风格的字符串s//"Hello World "s1.append(3, '!');	//将字符'!'重复追加3次到调用该函数的字符串对象的尾部。//"Hello World !!!"return 0;

四、string的删除

1、使用pop_back进行尾删

void pop_back();

使用示例:

string s1("Hello World");s1.pop_back();//Hello Worlds1.pop_back();//Hello Worls1.pop_back();//Hello Wor

2、使用erase删除

string& erase (size_t pos = 0, size_t len = npos);	//删除pos位置开始的n个字符
iterator erase (iterator p);	//删除pos位置的字符
iterator erase (iterator first, iterator last);//删除[pos1,pos2)上所有字符

使用示例:

	string s1("Hello World");//Hello Worlds1.erase(6, 3);		//erase(pos, n)删除pos位置开始的n个字符//Hello lds1.erase(s1.end() - 2);	//erase(pos)删除pos位置的字符//Hello ds1.erase(s1.begin() + 1, s1.begin() + 3);	//erase(pos1, pos2)删除[pos1,pos2)上所有字符//Hlo d

五、string的查找

1、使用find函数正向搜索第一个匹配项

size_t find (const string& str, size_t pos = 0) const;
/*在调用该函数的字符串对象中查找目标字符串str,可选参数pos表示查找起始位置,
默认从字符串开头开始查找。*/size_t find (const char* s, size_t pos = 0) const;
/*在调用该函数的字符串对象中查找以null结尾的C风格字符串s,可选参数pos表示
查找起始位置,默认从字符串开头开始查找。*/size_t find (char c, size_t pos = 0) const;
/*在调用该函数的字符串对象中查找目标字符c,可选参数pos表示查找起始位置,
默认从字符串开头开始查找。*/

使用示例:

string s1("http://www.cplusplus.com/reference/string/string/find/");//find(string)正向搜索与string对象所匹配的第一个位置string s2("www");size_t pos1 = s1.find(s2);cout << pos1 << endl; //7//find(str)正向搜索与字符串str所匹配的第一个位置char str[] = "cplusplus.com";size_t pos2 = s1.find(str);cout << pos2 << endl;  //11//find(char)正向搜索与字符char所匹配的第一个位置size_t pos3 = s1.find(':');cout << pos3 << endl; //4

2、使用rfind函数反向搜索第一个匹配项

size_t rfind (const string& str, size_t pos = npos) const;
/*从字符串末尾开始向前查找目标字符串str,可选参数pos表示查找起始位置,
默认从字符串开头开始查找。*/size_t rfind (const char* s, size_t pos = npos) const;
/*从字符串末尾开始向前查找以null结尾的C风格字符串s,可选参数pos表示
查找起始位置,默认从字符串开头开始查找。*/size_t rfind (char c, size_t pos = npos) const;
/*从字符串末尾开始向前查找目标字符c,可选参数pos表示查找起始位置,
默认从字符串开头开始查找。*/
string s1("http://www.cplusplus.com/reference/string/string/find/");//rfind(string)反向搜索与string对象所匹配的第一个位置string s2("string");size_t pos1 = s1.rfind(s2);cout << pos1 << endl; //42//rfind(str)反向搜索与字符串str所匹配的第一个位置char str[] = "reference";size_t pos2 = s1.rfind(str);cout << pos2 << endl;  //25//rfind(char)反向搜索与字符char所匹配的第一个位置size_t pos3 = s1.rfind('/');cout << pos3 << endl; //53return 0;

六、string的比较

使用compare函数完成比较:

int compare (const string& str) const;
//比较调用函数的字符串对象和参数字符串对象 str 的大小关系。int compare (size_t pos, size_t len, const string& str) const;
//比较调用函数的字符串对象从指定位置开始的子串和参数字符串对象 str 的大小关系。int compare (size_t pos, size_t len, const string& str, size_t subpos, size_t sublen) const;
/*比较调用函数的字符串对象从指定位置开始的子串(长度为 len)和参数字符串对象str 的子串(从 subpos 开始,长度为 sublen)的大小关系。
*/

使用示例:

string s1("hello world");string s2("hello CSDN");//"hello world"和"hello CSDN"比较cout << s1.compare(s2) << endl; //1//"ell"和"hello CSDN"比较cout << s1.compare(1, 3, s2) << endl; //-1//"hello"和"hello"比较cout << s1.compare(0, 4, s2, 0, 4) << endl; //0return 0;

注意:

  • 如果调用函数的字符串小于参数字符串,则返回负值。
  • 如果调用函数的字符串等于参数字符串,则返回零。
  • 如果调用函数的字符串大于参数字符串,则返回正值。

七、string的替换

使用replace函数完成string的替换:

string& replace (size_t pos, size_t len, const char* s);
string& replace (size_t pos, size_t len, size_t n, char c);

使用示例:

string s("hello world");//replace(pos, len, str)将pos位置开始的len个字符替换为字符串strs.replace(0, 4, "HELLO"); //HELLOo world//replace(pos, len, n, char)将pos位置开始的len个字符替换为n个字符chars.replace(10, 3, 3, '!'); //HELLOo wor!!!

八、string的交换

使用swap函数完成两个string类的交换:

void swap (string& x, string& y);
void swap (string& str);

使用示例:

	string s1("Hello");string s2("World");//void swap (string& x, string& y);s1.swap(s2);//void swap (string& str);swap(s1, s2);

九、string的大小和容量

1、使用size函数或length函数获取当前有效字符的个数

size_t size() const;
size_t length() const;

使用示例:

	string s1("Hello");string s2("World");auto size = s1.size();		//5auto length = s2.length();	//5

在这里插入图片描述
2、使用max_size函数获取string对象对多可包含的字符数

size_t max_size() const;

使用示例:

int main()
{string s("Hello");cout << s.max_size() << endl; //4294967294return 0;
}

3、使用capacity函数获取当前对象所分配的存储空间的大小

size_t capacity() const;

使用示例:

	string s1("Hello World");cout << s1.capacity() << endl;		//15

4、使用resize改变当前对象的有效字符的个数

void resize (size_t n);
void resize (size_t n, char c);
  1. 当n大于size时,若给出字符c,则用c来填充,否则用‘\0’来填充.
  2. 当n小于size时,则将size缩小到n.

使用示例:

string s1("CSDN");s1.resize(6, '!');		//CSDN!!s1.resize(3);			//CSDstring s2("CSDN!!!!!");	//CSDN!!!!!s2.resize(20, '*');		//CSDN!!!!!***********

在这里插入图片描述
在这里插入图片描述
注意: 若给出的n大于对象当前的capacity,则capacity也会根据自己的增长规则进行扩大。

5、使用reserve改变当前对象的容量大小

void reserve (size_t n = 0);
  1. 当n大于对象当前的capacity时,将capacity扩大到n或大于n。
  2. 当n小于对象当前的capacity时,什么也不做。

使用案例:

	string s1("Hello");cout << s1.size() << ' ' << s1.capacity() << endl;//5 15s1.reserve(20);cout << s1.size() << ' ' << s1.capacity() << endl;//5 31s1.reserve(2);cout << s1.size() << ' ' << s1.capacity() << endl;//5 31

注意:此函数对字符串的size没有影响,并且无法更改其内容。

6、使用clear删除对象的内容,删除后对象变为空字符串

void clear();

使用案例:

string s1("Hello World");cout << s1 << endl;		//Hello Worlds1.clear();cout << s1 << endl;		//空

7、使用empty判断对象是否为空

bool empty() const;

使用案例:

	string s("CSDN");cout << s.empty() << endl; //0//clear()删除对象的内容,该对象将变为空字符串s.clear();cout << s.empty() << endl; //1return 0;

十、string中元素的访问

1、[ ]+下标
 因为string类对[ ]运算符进行了重载,所以我们可以直接使用[ ]+下标访问对象中的元素。并且该重载使用的是引用返回,所以我们可以通过[ ]+下标修改对应位置的元素。

char& operator[] (size_t pos);
const char& operator[] (size_t pos) const;

用法示例:

	string s1("Hello CSDN");for (int i = 0; i < s1.size(); i++){cout << s1[i] << " ";}cout << endl;//H e l l o   C S D N//通过下标+[]来改变值for (int i = 0; i < s1.size(); i++){s1[i]++;`在这里插入代码片`}for (auto e : s1){cout << e << " ";}//I f m m p ! D T E O

2、使用at访问对象中的元素
 因为at函数也是使用的引用返回,所以我们也可以通过at函数修改对应位置的元素。

  	char& at (size_t pos);const char& at (size_t pos) const;

用法示例:

	string s("CSDN");for (size_t i = 0; i < s.size(); i++){//at(pos)访问pos位置的元素cout << s.at(i);}cout << endl;for (size_t i = 0; i < s.size(); i++){//at(pos)访问pos位置的元素,并对其进行修改s.at(i) = 'x';}cout << s << endl; //xxxx

3、使用范围for访问对象中的元素
 需要特别注意的是:若是需要通过范围for修改对象的元素,则用于接收元素的变量e的类型必须是引用类型,否则e只是对象元素的拷贝,对e的修改不会影响到对象的元素。

string s("CSDN");//使用范围for访问对象元素for (auto e : s){cout << e;}cout << endl; //CSDN//使用范围for访问对象元素,并对其进行修改for (auto& e : s) //需要修改对象的元素,e必须是引用类型{e = 'x';}cout << s << endl; //xxxxreturn 0;

4、使用迭代器访问对象中的元素

//使用迭代器访问对象元素string s1("Hello csdn");for (auto it = s1.begin(); it != s1.end(); it++){*it = toupper(*it);}cout << s1;		//HELLO CSDN

十一、string中运算符的使用

1、operator=
 string类中对=运算符进行了重载,重载后的=运算符支持string类的赋值、字符串的赋值以及字符的赋值。

	string s1("Hello World");string s2;s2 = s1;cout << s2 << endl;		//Hello Worlds2 = "!!!!!";cout << s2 << endl;		//!!!!!

2、operator+=
 string类中对+=运算符进行了重载,重载后的+=运算符支持string类的复合赋值、字符串的复合赋值以及字符复合的赋值

	string s1;string s2("hello");//支持string类的复合赋值s1 += s2;cout << s1 << endl; //hello//支持字符串的复合赋值s1 += " CSDN";cout << s1 << endl; //hello CSDN//支持字符的复合赋值s1 += '!';cout << s1 << endl; //hello CSDN!

3、operator+

string operator+ (const string& lhs, const string& rhs);
string operator+ (const string& lhs, const char*   rhs);
string operator+ (const char*   lhs, const string& rhs);
string operator+ (const string& lhs, char          rhs);
string operator+ (char          lhs, const string& rhs);

返回一个新构造的字符串对象,其值是 lhs 中的字符与 rhs 中的字符的相加。

string类中对+运算符进行了重载,重载后的+运算符支持以下几种类型的操作:
 string类 + string类
 string类 + 字符串
 字符串 + string类
 string类 + 字符
 字符 + string类
它们相加后均返回一个string类对象。

string s;string s1("super");string s2("man");char str[] = "woman";char ch = '!';//string类 + string类s = s1 + s2;cout << s << endl; //superman//string类 + 字符串s = s1 + str;cout << s << endl; //superwoman//字符串 + string类s = str + s1;cout << s << endl; //womansuper//string类 + 字符s = s1 + ch;cout << s << endl; //super!//字符 + string类s = ch + s1;cout << s << endl; //!super

4、operator>> 和 operator<<
 string类中也对>>和<<运算符进行了重载,这就是为什么我们可以直接使用>>和<<对string类进行输入和输出的原因。

istream& operator>> (istream& is, string& str);
ostream& operator<< (ostream& os, const string& str);

用法示例:

	string s;cin >> s; //输入cout << s << endl; //输出

5、relational operators
 string类中还对一系列关系运算符进行了重载,它们分别是==、!=、<、<=、>、>=。重载后的关系运算符支持string类和string类之间的关系比较、string类和字符串之间的关系比较、字符串和string类之间的关系比较。

	string s1("abcd");string s2("abde");cout << (s1 > s2) << endl; //0cout << (s1 < s2) << endl; //1cout << (s1 == s2) << endl; //0

注意:这些重载的关系比较运算符所比较的都是对应字符的ASCII码值。

十二、string中与迭代器相关的函数

1、与正向迭代器相关的函数
begin函数:返回一个指向字符串第一个字符的迭代器。

	  iterator begin();
const_iterator begin() const;

end函数:返回一个指向字符串结束字符的迭代器,即’\0’

	  iterator end();
const_iterator end() const;

使用示例:

	//正向迭代器string::iterator it = s.begin();while (it != s.end()){cout << *it;it++;}cout << endl; //hello string

2、与反向迭代器相关的函数
rbegin函数:返回指向字符串最后一个字符的反向迭代器。

		reverse_iterator rbegin();const_reverse_iterator rbegin() const;

rend函数:返回指向字符串第一个字符前面的理论元素的反向迭代器。

		reverse_iterator rend();const_reverse_iterator rend() const;
	//反向迭代器string::reverse_iterator rit = s.rbegin();while (rit != s.rend()){cout << *rit;rit++;}cout << endl; //gnirts olleh

十三、string与字符串之间的转换

1、将字符串转换为string
 将字符串转换为string很简单,在前面讲string的定义方式时就有说到。

	1.string s1("hello world");2.char str[] = "hello world";string s2(str);cout << s1 << endl; //hello worldcout << s2 << endl; //hello world

2、使用c_str或data将string转换为字符串

const char* c_str() const;
const char* data() const;

区别:

  • 在C++98中,c_str()返回 const char* 类型,返回的字符串会以空字符结尾。
  • 在C++98中,data()返回 const char* 类型,返回的字符串不以空字符结尾。

但是在C++11版本中,c_str()与data()用法相同。

	string s1("Hello World");auto str1 = s1.data();		auto str2 = s1.c_str();cout << str1 << endl;		//Hello Worldcout << str2 << endl;		//Hello World

十四、string中子字符串的提取

1、使用substr函数提取string中的子字符串

string substr (size_t pos = 0, size_t len = npos) const;

使用示例:

string s1("abcdef");string s2;//substr(pos, n)提取pos位置开始的n个字符序列作为返回值s2 = s1.substr(2, 4);cout << s2 << endl; //cdef

2、使用copy函数将string的子字符串复制到字符数组中

size_t copy (char* s, size_t len, size_t pos = 0) const;

用法示例:

	string s("abcdef");char str[20];//copy(str, n, pos)复制pos位置开始的n个字符到str字符串size_t length = s.copy(str, 4, 2);//copy函数不会在复制内容的末尾附加'\0',需要手动加str[length] = '\0'; cout << str << endl; //cdef

十五、string中的getline函数

我们知道,使用>>进行输入操作时,当>>读取到空格便会停止读取,基于此,我们将不能用>>将一串含有空格的字符串读入到string对象中。

	string s;cin >> s; //输入:hello CSDNcout << s << endl; //输出:helloreturn 0;

这时,我们就需要用getline函数完成一串含有空格的字符串的读取操作了。

用法一:

istream& getline (istream& is, string& str);

getline函数将从is中提取到的字符存储到str中,直到读取到换行符’\n’为止。

用法示例:

	string s;getline(cin, s); //输入:hello CSDNcout << s << endl; //输出:hello CSDN

用法二:

istream& getline (istream& is, string& str, char delim);

用法示例:

	string s;getline(cin, s, 'D'); //输入:hello CSDNcout << s << endl; //输出:hello CS

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解决DBeaver执行脚本报错No active connection

解决DBeaver执行脚本报错No active connection 1、报错问腿 2、问题解决 2.1、右键点击该数据库&#xff0c;选择SQL编辑器&#xff0c;选择新建SQL编辑器&#xff0c;然后将sql语句复制过去。 或者左击选中数据库后直接使用快捷键 Ctrl] 2.2、在Project-General中找到Scr…

Matlab梁单元有限元编程 | 铁木辛柯梁 | 欧拉梁 | Matlab源码 | 理论文本

专栏导读 作者简介&#xff1a;工学博士&#xff0c;高级工程师&#xff0c;专注于工业软件算法研究本文已收录于专栏&#xff1a;《有限元编程从入门到精通》本专栏旨在提供 1.以案例的形式讲解各类有限元问题的程序实现&#xff0c;并提供所有案例完整源码&#xff1b;2.单元…

2024.3.6

作业1&#xff1a;使用C语言完成数据库的增删改 #include <myhead.h>//定义添加员工信息函数 int Add_worker(sqlite3 *ppDb) {//准备sql语句printf("请输入要添加的员工信息:\n");//从终端获取员工信息char rbuf[128]"";fgets(rbuf,sizeof(rbuf),s…

【C++】继续学习 string类 吧

开始使用 string类 吧 1 继续学习1.1 扩容机制1.2 string类对象的访问及遍历操作1.3 string类对象的修改操作1.4 其他一些成员函数 2 实践解决问题&#xff1a;Thanks♪(&#xff65;ω&#xff65;)&#xff89;谢谢阅读&#xff01;&#xff01;&#xff01;下一篇文章见&…

【好书推荐-第九期】Sora核心技术相关书籍《扩散模型:从原理到实战》与《GPT 图解:大模型是怎样构建的》:Sora的两大核心技术,都藏在这两本书里!

&#x1f60e; 作者介绍&#xff1a;我是程序员洲洲&#xff0c;一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主、前后端开发、人工智能研究生。公众号&#xff1a;洲与AI。 &#x1f388; 本文专栏&#xff1a;本文收录…

C 嵌入式系统设计模式 20:队列模式

本书的原著为&#xff1a;《Design Patterns for Embedded Systems in C ——An Embedded Software Engineering Toolkit 》&#xff0c;讲解的是嵌入式系统设计模式&#xff0c;是一本不可多得的好书。 本系列描述我对书中内容的理解。本文章描述嵌入式并发和资源管理模式之六…

Stable Diffusion WebUI API http://127.0.0.1:7860/docs空白

在尝试调用Stable Diffusion WebUI API的时候&#xff0c;打开http://127.0.0.1:7860/docs遇到了以下页面 网络诊断是这样的原因&#xff1a; 修bug&#xff0c;改来改去遇到了以下两种页面&#xff1a; 此时http://127.0.0.1:7860可以如下正常显示&#xff1a; 查资料的时候找…

外包干了10天,技术退步明显。。。。。

先说一下自己的情况&#xff0c;本科生&#xff0c;2019年我通过校招踏入了南京一家软件公司&#xff0c;开始了我的职业生涯。那时的我&#xff0c;满怀热血和憧憬&#xff0c;期待着在这个行业中闯出一片天地。然而&#xff0c;随着时间的推移&#xff0c;我发现自己逐渐陷入…

域名 DNS 信息查询 API 数据接口

域名 DNS 信息查询 API 数据接口 网络工具&#xff0c;多种记录类型数据返回&#xff0c;丰富的信息结构&#xff0c;毫秒级响应。 1. 产品功能 提供域名 DNS 解析完整记录&#xff1b;丰富的解析记录类型&#xff0c;包括&#xff1a;A, AAAA, MX, TXT, NS, CNAME, SRV, PTR…

SPI 接口

SPI 接口 SPI 简介寻址方式通信过程极性和相位IIC 和 SPI 的异同相同点不同点 SPI 简介 SPI&#xff08;Serial Peripheral Interface&#xff09;是串行外设接口的缩写&#xff0c;SPI是一种高速的、全双工、同步的串行通信总线&#xff1b;SPI采用主从方式工作&#xff0c;一…

强大的ps 命令 -o 自定义输出内容选项

强大的ps 命令 -o 自定义输出内容选项 1、ps命令介绍和作用2、问题描述 1、ps命令介绍和作用 ps 是一个 Unix 和类 Unix 操作系统中常用的命令&#xff0c;用于显示当前运行的进程信息。ps 命令的作用包括&#xff1a; 查看进程信息&#xff1a; ps 命令可以列出当前系统中正…

数据结构——lesson5栈和队列详解

hellohello~这里是土土数据结构学习笔记&#x1f973;&#x1f973; &#x1f4a5;个人主页&#xff1a;大耳朵土土垚的博客 &#x1f4a5; 所属专栏&#xff1a;数据结构学习笔记 &#x1f4a5;对于顺序表链表有疑问的都可以在上面数据结构的专栏进行学习哦~感谢大家的观看与…

JavaScript实现点击鼠标弹钢琴的效果

思路&#xff1a; 图片设置宽900px&#xff0c;找到鼠标按下时的x坐标和img距离body的x坐标&#xff0c;两个值相减&#xff0c;然后除100取整&#xff0c;赋值给a&#xff0c;通过判断a的值来确定放出那个音乐。 完整代码&#xff1a; <!DOCTYPE html> <html lan…

YOLOv9独家原创改进|使用HWD:Haar小波下采样模块

专栏介绍&#xff1a;YOLOv9改进系列 | 包含深度学习最新创新&#xff0c;主力高效涨点&#xff01;&#xff01;&#xff01; 一、论文简介 最大池化或跨步卷积等下采样操作在卷积神经网络&#xff08;CNNs&#xff09;中广泛使用&#xff0c;以聚合局部特征&#xff0c;扩大感…

Cobalt Strike 4.9.1(已更新,文章图片没换)

Cobalt Strike 4.9.1 1. 工具介绍1.1. 工具添加1.2. 工具获取 2. 工具使用2.1. 添加权限并运行2.2. 连接服务端2.3. 连接成功 3. 安全性自查 1. 工具介绍 CS 是Cobalt Strike的简称&#xff0c;是一款渗透测试神器&#xff0c;常被业界人称为CS神器。Cobalt Strike已经不再使用…

用ChatGPT计算植被归一化指数NDVI并出图的详细教程

用ChatGPT结合GIS计算植被归一化指数NDVI出图教程 用ENVI计算比较繁琐&#xff0c;如今AI的盛行&#xff0c;我们可以轻松解决计算问题&#xff0c;只需1一分钟变可以出图。 详细教学请看上方视频步骤。 更多ChatGPT教学内容请见&#xff1a;ChatGPT结合GIS&#xff1a;一分钟…

SpringBoot+Mybatis-plus+shardingsphere实现分库分表

SpringBootMybatis-plusshardingsphere实现分库分表 文章目录 SpringBootMybatis-plusshardingsphere实现分库分表介绍引入依赖yaml配置DDL准备数据库ds0数据库ds1 entitycotrollerserviceMapper启动类测试添加修改查询删除 总结 介绍 实现亿级数据量分库分表的项目是一个挑战…

C++之获取Windows系统信息

目录 1. 操作系统版本 2. 获取CPU信息 3. 获取内存信息 4. 获取硬盘信息 5.获取网络接口信息 6.获取计算机名称、用户名 在C中&#xff0c;你可以使用Windows API函数来获取Windows系统的各种信息。以下是一些常见的API函数和示例代码&#xff0c;用于获取Windows系统信息…

Nerf原理理解

神经辐射场是一个简单的全连接网络&#xff08;权重约为 5MB&#xff09;&#xff0c;经过训练可使用渲染损失再现单个场景的输入视图。该网络直接从空间位置和观看方向&#xff08;5D 输入&#xff09;映射到颜色和不透明度&#xff08;4D 输出&#xff09;&#xff0c;充当“…

【Kafka系列 06】Kafka Producer源码解析

温馨提示&#xff1a;本文基于 Kafka 2.3.1 版本。 一、Kafka Producer 原理图 生产者的 API 使用还是比较简单&#xff0c;创建一个 ProducerRecord 对象&#xff08;这个对象包含目标主题和要发送的内容&#xff0c;当然还可以指定键以及分区&#xff09;&#xff0c;然后调…