C++基础(7)——STL简介及string类
目录
1.STL简介
1.1什么是
1.2STL的历史版本
1.3STL的六大组件
编辑
1.4有用的网址
2.string类
2.1string的多种定义方式
2.2string的插入
2.2.1尾插(push_back)
2.2.2insert插入
2.3拼接(append)
2.4删除
2.4.1尾删(pop_back)
2.4.2使用erase删除
2.5string的查找
2.5.1使用find函数正向搜索
2.5.2使用rfind函数反向搜索第一个匹配项
2.6string的比较
2.7string的替换
2.8string的交换
2.9string的大小及容量
2.9.1获取有效字符的个数
2.9.3使用capacity函数获取所分配的空间的大小
2.9.4使用resize改变当前对象的有效字符的个数
2.9.5用reserve改变当前对象容量的大小
2.9.6使用clear删除对象的内容,删除后对象变为空字符串
2.9.7使用empty判断对象是否为空
2.10string中元素的多种访问方式
2.10.1下标
2.10.2使用at访问对象中的元素
2.10.3使用范围for访问对象中的元素
2.10.4使用迭代器访问对象中的元素
2.11string中的运算符
2.11.1=
2.11.2+=
2.11.3+
2.11.4operator>> 和 operator<<
2.11.5relational operators
2.12string中与迭代器相关的函数
2.12.1与正向迭代器相关的函数
2.12.2与反向迭代器相关的函数
2.13string与字符串之间的转换
2.13.1将字符串转换为string
2.13.2使用c_str或data将string转换为字符串
2.14string中子字符串的提取
2.14.1使用substr函数提取string中的子字符串
2.14.3使用copy函数将string的子字符串复制到字符数组中
2.15string中的getline函数
2.15.1用法一:
2.15.2用法二:
1.STL简介
1.1什么是
STL(standard template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。
1.2STL的历史版本
原始版本:
Alexander Stepanov、Meng Lee 在惠普实验室完成的原始版本,本着开源精神,他们声明允许 任何人任意运用、拷贝、修改、传播、商业使用这些代码,无需付费。唯一的条件就是也需要向原 始版本一样做开源使用。 HP版本--所有STL实现版本的始祖。
P. J. 版本:
由P. J. Plauger开发,继承自HP版本,被Windows Visual C++采用,不能公开或修改,缺陷:可读 性比较低,符号命名比较怪异。
RW版本:
由Rouge Wage公司开发,继承自HP版本,被C+ + Builder 采用,不能公开或修改,可读性一 般。
SGI版本:
由Silicon Graphics Computer Systems,Inc公司开发,继承自HP版 本。被GCC(Linux)采用,可 移植性好,可公开、修改甚至贩卖,从命名风格和编程 风格上看,阅读性非常高。我们后面学习
STL要阅读部分源代码,主要参考的就是这个版本。
1.3STL的六大组件
1.4有用的网址
cplusplus.com
2.string类
2.1string的多种定义方式
string(); //构造一个空字符串string(const char* s); //用C-string构造string类string(const char* s, size_t n); //用C-string的前n个字符构造string类string(size_t n, char c); //用n个c字符构造string类string(const string& str); //拷贝构造string(const string& str, size_t pos, size_t len = npos); //用从pos位置开始的长度为len的字串来构造string类
示例:
string s1;
string s2("hello world");
string s3("hello world", 3);
string s4(10, 'a');
string s5(s2);
string s6(s2, 0, 5);
2.2string的插入
2.2.1尾插(push_back)
函数:void push_back (char c);
示例:
#include <iostream>
#include <string>
using namespace std;
int main()
{string s;s.push_back('X');s.push_back('Y');s.push_back('W');s.push_back('L');cout << s << endl; //XYWLreturn 0;
}
2.2.2insert插入
函数:
string& insert (size_t pos, const string& str);//在pos位置插入string对象
string& insert (size_t pos, const char* s);//在pos位置插入字符串str
iterator insert (iterator p, char c);//在pos位置插入字符char
示例:
#include <iostream>
#include <string>
using namespace std;
int main()
{string s("X"); //X//insert(pos, string)在pos位置插入string对象string l("Y");s.insert(2, l); //XY//insert(pos, str)在pos位置插入字符串strs.insert(1, "W"); //XYW//insert(pos, char)在pos位置插入字符chars.insert(s.end(), 'L'); //XYWLcout << s << endl; //XYWLreturn 0;
}
2.3拼接(append)
函数:string& append (const string& str);//拼接string对象
string& append (const char* s);//拼接字符串strstring& append (size_t n, char c);拼接字符char
示例:
#include <iostream>
#include <string>
using namespace std;
int main()
{string s1("I");string s2(" love");s1.append(s2); //I loves1.append(" HHR"); //I love HHRs1.append(3, '!'); //I love HHR!!!cout << s1 << endl; //I love HHR!!!return 0;
}
2.4删除
2.4.1尾删(pop_back)
函数:void pop_back();
示例:
#include <iostream>
#include <string>
using namespace std;
int main()
{string s("XYWL");s.pop_back();s.pop_back();s.pop_back();cout << s << endl; //Xreturn 0;
}
2.4.2使用erase删除
函数:string& erase (size_t pos = 0, size_t len = npos);
iterator erase (iterator p);
iterator erase (iterator first, iterator last);
示例:
#include <iostream>
#include <string>
using namespace std;
int main()
{string s("I love XYWL!!!");//erase(pos, n)删除pos位置开始的n个字符s.erase(11, 3); //I love XYWL//erase(pos)删除pos位置的字符s.erase(s.end()-1); //I love XYW//erase(pos1, pos2)删除[pos1,pos2)上所有字符s.erase(s.begin() + 1, s.end()); //Icout << s << endl; //Ireturn 0;
}
2.5string的查找
查找分为正向和反向:
2.5.1使用find函数正向搜索
函数:size_t find (const string& str, size_t pos = 0) const;//搜索与string对象所匹配的第一个位置
size_t find (const char* s, size_t pos = 0) cons//搜索与字符串str所匹配的第一个位置
size_t find (char c, size_t pos = 0) const;//搜索与字符char所匹配的第一个位置
示例:
#include <iostream>
#include <string>
using namespace std;
int main()
{string s1("https://www.acwing.com/problem/content/submission/1/");string s2("www");size_t pos1 = s1.find(s2);cout << pos1 << endl; //8char str[] = "acwing.com";size_t pos2 = s1.find(str);cout << pos2 << endl; //12size_t pos3 = s1.find(':');cout << pos3 << endl; //5return 0;
}
2.5.2使用rfind函数反向搜索第一个匹配项
函数:size_t rfind (const string& str, size_t pos = npos) const;搜索与string对象所匹配的第一个位置
size_t rfind (const char* s, size_t pos = npos) const;//搜索与字符串str所匹配的第一个位置
size_t rfind (char c, size_t pos = npos) const;//搜索与字符char所匹配的第一个位置
#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
#include <string>
using namespace std;
int main()
{string s1("https://www.acwing.com/problem/content/submission/1/");string s2("1");size_t pos1 = s1.rfind(s2);cout << pos1 << endl; //50char str[] = "content";size_t pos2 = s1.rfind(str);cout << pos2 << endl; //31size_t pos3 = s1.rfind('/');cout << pos3 << endl; //51return 0;
}
2.6string的比较
函数:int compare (const string& str) const;//雷同
int compare (size_t pos, size_t len, const string& str) const;//雷同
int compare (size_t pos, size_t len, const string& str, size_t subpos, size_t sublen) const;//雷同
比较规则(同C语言):
1、比较字符串中第一个不匹配的字符值较小,或者所有比较字符都匹配,但比较字符串较短,则返回小于0的值。
2、比较字符串中第一个不匹配的字符值较大,或者所有比较字符都匹配,但比较字符串较长,则返回大于0的值。
3、比较的两个字符串相等,则返回0。总结:括号外的大为1,小-1,同0。
示例:
#include <iostream>
#include <string>
using namespace std;
int main()
{string s1("hello world");string s2("hello hhy");//"hello world"和"hello hhy"比较cout << s1.compare(s2) << endl; //1//"ello"和"hello hhy"比较cout << s1.compare(1, 4, s2) << endl; //-1//"hello"和"hello"比较cout << s1.compare(0, 4, s2, 0, 4) << endl; //0return 0;
}
2.7string的替换
函数:string& replace (size_t pos, size_t len, const char* s);//将pos位置开始的len个字符替换为字符串str
string& replace (size_t pos, size_t len, size_t n, char c);将pos位置开始的len个字符替换为n个字符char
示例:
#include <iostream>
#include <string>
using namespace std;
int main()
{string s("hello world");s.replace(6, 4, "XTWL"); //hello XYWLd//replace(pos, len, n, char)将pos位置开始的len个字符替换为n个字符chars.replace(10, 1, 1, '!'); //hello XYWL!cout << s << endl;return 0;
}
2.8string的交换
函数:void swap (string& x, string& y);
void swap (string& str);
#include <iostream>
#include <string>
using namespace std;
int main()
{string s1("hello");string s2("world");swap(s1, s2);cout << s1 << endl; //worldcout << s2 << endl; //hellos1.swap(s2);cout << s1 << endl; //hellocout << s2 << endl; //worldreturn 0;
}
2.9string的大小及容量
2.9.1获取有效字符的个数
函数:size_t size() const;
size_t length() const;
示例:
#include <iostream>
#include <string>
using namespace std;
int main()
{string s("XYWL");cout << s.size() << endl; //4cout << s.length() << endl; //4return 0;
}
2.9.3使用capacity函数获取所分配的空间的大小
函数:size_t capacity() const;
#include <iostream>
#include <string>
using namespace std;
int main()
{string s("XYWL);cout << s.capacity() << endl; //15return 0;
}
2.9.4使用resize改变当前对象的有效字符的个数
函数:void resize (size_t n);
void resize (size_t n, char c);
resize规则:
1、当n大于对象当前的size时,将size扩大到n,扩大的字符为c,若c未给出,则默认为’\0’。
2、当n小于对象当前的size时,将size缩小到n。
#include <iostream>
#include <string>
using namespace std;
int main()
{string s1("XYWL");s1.resize(20);cout << s1 << endl; //XYWLcout << s1.size() << endl; //20cout << s1.capacity() << endl; //31string s2("XYWL");s2.resize(20, '0');cout << s2 << endl; //XYWL0000000000000000cout << s2.size() << endl; //20cout << s2.capacity() << endl; //31 string s3("XYWL");s3.resize(2);cout << s3 << endl; //XYcout << s3.size() << endl; //2cout << s3.capacity() << endl; //15return 0;
}
注意: 若给出的n大于当前对象的capacity,则capacity也会随其增长。
2.9.5用reserve改变当前对象容量的大小
函数:void reserve (size_t n = 0);
reserve规则:
1、当n大于对象当前的capacity时,将capacity扩大到n或大于n。
2、当n小于对象当前的capacity时,什么也不做(与resize不同)。
示例:
#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
#include <string>
using namespace std;
int main()
{string s("XYWL");cout << s << endl; //XYWLcout << s.size() << endl; //4cout << s.capacity() << endl; //15s.reserve(30);cout << s << endl; //XYWLcout << s.size() << endl; //4cout << s.capacity() << endl; //31s.reserve(3);cout << s << endl; //XYWLcout << s.size() << endl; //4cout << s.capacity() << endl; //31return 0;
}
注:此函数对size没任何影响
2.9.6使用clear删除对象的内容,删除后对象变为空字符串
函数:void clear();
示例:
#include <iostream>
#include <string>
using namespace std;
int main()
{string s("XYWL");//clear()删除对象的内容,该对象将变为空字符串s.clear();cout << s << endl; //空字符串return 0;
}
2.9.7使用empty判断对象是否为空
函数:bool empty() const;
示例:
#include <iostream>
#include <string>
using namespace std;
int main()
{string s("XYWL");cout << s.empty() << endl; //0s.clear();cout << s.empty() << endl; //1return 0;
}
2.10string中元素的多种访问方式
2.10.1下标
在string中我们可以直接使用[ ]+下标访问对象中的元素。
函数:char& operator[] (size_t pos);
const char& operator[] (size_t pos) const;
示例:
#include <iostream>
#include <string>
using namespace std;
int main()
{string s("XYWL");//[]+下标访问对象元素for (size_t i = 0; i < s.size(); i++){cout << s[i];}cout << endl;for (size_t i = 0; i < s.size(); i++){s[i] = 'x';}cout << s << endl; //xxxxreturn 0;
}
2.10.2使用at访问对象中的元素
函数:char& at (size_t pos);
const char& at (size_t pos) const;
示例:
#include <iostream>
#include <string>
using namespace std;
int main()
{string s("XYWL");for (size_t i = 0; i < s.size(); i++){cout << s.at(i);}cout << endl;for (size_t i = 0; i < s.size(); i++){s.at(i) = 'x';}cout << s << endl; //xxxxreturn 0;
}
2.10.3使用范围for访问对象中的元素
#include <iostream>
#include <string>
using namespace std;
int main()
{string s("XYWL");for (auto e : s){cout << e;}cout << endl; //XYWLfor (auto& e : s) {e = 'x';}cout << s << endl; //xxxxreturn 0;
}
2.10.4使用迭代器访问对象中的元素
#include <iostream>
#include <string>
using namespace std;
int main()
{string s("XYWL");string::iterator it1 = s.begin();while (it1 != s.end()){cout << *it1;it1++;}cout << endl; //XYWLstring::iterator it2 = s.begin();while (it2 != s.end()){*it2 += 1;it2++;}cout << s << endl; //YZXMreturn 0;
}
2.11string中的运算符
2.11.1=
string类中对=运算符进行了重载,重载后的=运算符支持string类的赋值、字符串的赋值以及字符的赋值。
示例:
#include <iostream>
#include <string>
using namespace std;
int main()
{string s1;string s2("XYWL");s1 = s2;cout << s1 << endl; //XYWLs1 = "hello";cout << s1 << endl; //hellos1 = '0';cout << s1 << endl; //0return 0;
}
2.11.2+=
string类中对+=运算符进行了重载,重载后的+=运算符支持string类的复合赋值、字符串的复合赋值以及字符复合的赋值。
示例:
#include <iostream>
#include <string>
using namespace std;
int main()
{string s1;string s2("hello");//支持string类的复合赋值s1 += s2;cout << s1 << endl; //hello//支持字符串的复合赋值s1 += " XYWL";cout << s1 << endl; //hello XYWL//支持字符的复合赋值s1 += '!';cout << s1 << endl; //hello XYWL!return 0;
}
2.11.3+
string类中对+运算符进行了重载,重载后的+运算符支持以下几种类型的操作:
string类 + string类
string类 + 字符串
字符串 + string类
string类 + 字符
字符 + string类
它们相加后均返回一个string类对象。
示例:
#include <iostream>
#include <string>
using namespace std;
int main()
{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; //!superreturn 0;
}
2.11.4operator>> 和 operator<<
函数:istream& operator>> (istream& is, string& str);
ostream& operator<< (ostream& os, const string& str);
示例:
#include <iostream>
#include <string>
using namespace std;
int main()
{string s;cin >> s; cout << s << endl; return 0;
}
2.11.5relational operators
string类中还对一系列关系运算符进行了重载,它们分别是==、!=、<、<=、>、>=。
示例:
#include <iostream>
#include <string>
using namespace std;
int main()
{string s1("abcd");string s2("abde");cout << (s1 > s2) << endl; //0cout << (s1 < s2) << endl; //1cout << (s1 == s2) << endl; //0return 0;
}
注:比较的是ASCII码
2.12string中与迭代器相关的函数
2.12.1与正向迭代器相关的函数
begin函数:返回一个指向字符串第一个字符的迭代器。
函数:iterator begin();
const_iterator begin() const;
end函数:返回一个指向字符串结束字符的迭代器,即’\0’。
函数:iterator end();
const_iterator end() const;
示例:
#include <iostream>
#include <string>
using namespace std;
int main()
{string s("hello string");string::iterator it = s.begin();while (it != s.end()){cout << *it;it++;}cout << endl; //hello stringreturn 0;
}
2.12.2与反向迭代器相关的函数
rbegin函数:返回指向字符串最后一个字符的反向迭代器。
函数:reverse_iterator rbegin();
const_reverse_iterator rbegin() const;
rend函数:返回指向字符串第一个字符前面的理论元素的反向迭代器。
函数:reverse_iterator rend();
const_reverse_iterator rend() const;
示例:
#include <iostream>
#include <string>
using namespace std;
int main()
{string s("hello world");string::reverse_iterator rit = s.rbegin();while (rit != s.rend()){cout << *rit;rit++;}cout << endl; //dlrow ollehreturn 0;
}
2.13string与字符串之间的转换
2.13.1将字符串转换为string
#include <iostream>
#include <string>
using namespace std;
int main()
{//方式一string s1("hello world");//方式二char str[] = "hello world";string s2(str);cout << s1 << endl; //hello worldcout << s2 << endl; //hello worldreturn 0;
}
2.13.2使用c_str或data将string转换为字符串
函数:const char* c_str() const;
const char* data() const;
区别:
1.在C++98中,c_str()返回 const char* 类型,返回的字符串会以空字符结尾。
2.在C++98中,data()返回 const char* 类型,返回的字符串不以空字符结尾。
3.但是在C++11版本中,c_str()与data()用法相同。
#include <iostream>
#include <string>
using namespace std;
int main()
{string s("hello world ");const char* str1 = s.data();const char* str2 = s.c_str();cout << str1 << endl;cout << str2 << endl;return 0;
}
2.14string中子字符串的提取
2.14.1使用substr函数提取string中的子字符串
函数:string substr (size_t pos = 0, size_t len = npos) const;
示例:
#include <iostream>
#include <string>
using namespace std;
int main()
{string s1("abcdef");string s2;s2 = s1.substr(2, 4);cout << s2 << endl; //cdefreturn 0;
}
2.14.3使用copy函数将string的子字符串复制到字符数组中
函数:size_t copy (char* s, size_t len, size_t pos = 0) const;
#include <iostream>
#include <string>
using namespace std;
int main()
{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; //dcefreturn 0;
}
2.15string中的getline函数
因为在之前我们知道在读入字符串是时,cin>>当读到空格时就会停止,于是我们有了getline。
2.15.1用法一:
函数:istream& getline (istream& is, string& str);
getline函数将从is中提取到的字符存储到str中,直到读取到换行符’\n’为止。
#include <iostream>
#include <string>
using namespace std;
int main()
{string s;getline(cin, s); //输入:hello CSDNcout << s << endl; //输出:hello CSDNreturn 0;
}
2.15.2用法二:
函数:istream& getline (istream& is, string& str, char delim);
getline函数将从is中提取到的字符存储到str中,直到读取到分隔符delim或换行符’\n’为止。
#include <iostream>
#include <string>
using namespace std;
int main()
{string s;getline(cin, s, 'r'); //输入:hello worldcout << s << endl; //输出:hello woreturn 0;
}
相关文章:

C++基础(7)——STL简介及string类
目录 1.STL简介 1.1什么是 1.2STL的历史版本 1.3STL的六大组件 编辑 1.4有用的网址 2.string类 2.1string的多种定义方式 2.2string的插入 2.2.1尾插(push_back) 2.2.2insert插入 2.3拼接(append) 2.4删除 2.4.1尾…...
配置Nginx以支持通过HTTPS回源到CDN
要配置Nginx以支持通过HTTPS回源到CDN,你需要确保Nginx已正确配置SSL,并且能够处理来自CDN的HTTPS请求。以下是一个简化的Nginx配置示例,它配置了SSL并设置了代理服务器参数以回源到CDN: server {listen 443 ssl;server_name you…...

yolov10+strongsort的目标跟踪实现
此次yolov10deepsort不论是准确率还是稳定性,再次超越了之前的yolodeepsort系列。 yolov10介绍——实时端到端物体检测 YOLOv10 是清华大学研究人员在 UltralyticsPython 清华大学的研究人员在 YOLOv10软件包的基础上,引入了一种新的实时目标检测…...

C# 字符与字符串
本课要点: 1、字符类Char的使用 2、字符串类String的使用 3、可变字符串****StringBuilder 4、常见错误 一 何时用到字符与字符串 问题: 输出C#**课考试最高分:**98.5 输出最高分学生姓名:张三 输出最高分学生性别&#x…...
在Ubuntu 16.04上使用LEMP安装WordPress的方法
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 简介 WordPress 是互联网上最流行的 CMS(内容管理系统)。它允许您在 MySQL 后端和 PHP 处理的基础上轻松设置灵…...
显示器放大后,大漠识图识色坐标偏移解决方法
原因分析: 显示器分辨率较高,DPI设置放大125% or 150% or 200%,游戏打开时也会默认会根据显示器的放大比例自行放大,但是大漠综合管理工具抓图不会放大; 解决方法: 1、大漠综合管理…...

C++容器之list基本使用
目录 前言 一、list的介绍? 二、使用 1.list的构造 2.list iterator的使用 3.list capacity 🥇 empty 🥇size 4.list element access 🥇 front 🥇 back 5.list modifiers 🥇 push_front 🥇 po…...

Redis-哨兵
概念 Redis Sentinel 相关名词解释 注意: 哨兵机制不负责存储数据,只是对其它的redis-server进程起到监控的作用哨兵节点,也会搞一个集合,防止一个挂了 ⼈⼯恢复主节点故障 用户监控: 实际开发中,对于服务器后端开发,监控程序,是很重要的 服务器长期运行,总会有一些意外,…...

Pikachu-Sql-Inject - 基于时间的盲注
基于时间的盲注: 就是前端的基于time 的盲注,什么错误信息都看不到,但是还可以通过特定的输入,判断后台的执行时间,从而确定注入。 mysql 里函数sleep() 是延时的意思,sleep(10)就是数据库延时10 秒返回内…...

JAVA开源项目 旅游管理系统 计算机毕业设计
本文项目编号 T 063 ,文末自助获取源码 \color{red}{T063,文末自助获取源码} T063,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析5.4 用例设计 六、核…...

景联文科技入选《2024中国AI大模型产业图谱2.0版》数据集代表厂商
近日,大数据产业领域头部媒体数据猿携手上海大数据联盟联合发布了备受瞩目的《2024中国AI大模型产业图谱2.0版》。以大数据与AI为代表的智能技术为主要视角,聚焦全产业链,为业内提供更为专业直观的行业指导。 景联文科技凭借高质量数据集&…...

【C语言】内存函数的使用和模拟实现
文章目录 一、memcpy的使用和模拟实现二、memmove的使用和模拟实现三、memset的使用四、memcmp的使用 一、memcpy的使用和模拟实现 在之前我们学习了使用和模拟实现strncpy函数,它是一个字符串函数,用来按照给定的字节个数来拷贝字符串,那么问…...

在WPF中实现多语言切换的四种方式
在WPF中有多种方式可以实现多语言,这里提供几种常用的方式。 一、使用XML实现多语言切换 使用XML实现多语言的思路就是使用XML作为绑定的数据源。主要用到XmlDataProvider类. 使用XmlDataProvider.Source属性指定XML文件的路径或通过XmlDataProvider.Document指定…...
30min 的OpenCV learning Note
1.安装python和pycharm与环境搭配 打开Windows终端:(winR)(一般使用清华镜像网站安装库比较快) pip install opencv-contrib-python -i https://pypi.mirrors.ustc.edu.cn/simple 或者 python -m pip install open…...

C--编译和链接见解
欢迎各位看官!如果您觉得这篇文章对您有帮助的话 欢迎您分享给更多人哦 感谢大家的点赞收藏评论 感谢各位看官的支持!!! 一:翻译环境和运行环境 在ANSIIC的任何一种实现中,存在两个不同的环境1,…...
【QT Quick】基础语法:基础类与控件
QML 的基础类和控件中,我们可以看到主要的几个分类:基础控件类、窗口类以及组件类。以下是对这些控件及其属性、继承关系等的详细讲解: 控件关系总结 QtObject 是所有 QML 对象的基类。它定义了基础属性,主要用于逻辑和数据封装…...

使用 SSH 连接 Docker 服务器:IntelliJ IDEA 高效配置与操作指南
使用 SSH 连接 Docker 服务器:IntelliJ IDEA 高效配置与操作指南 本文详细介绍了如何在 2375 端口未开放的情况下,通过 SSH 连接 Docker 服务器并在 Idea 中进行开发。通过修改用户权限、生成密钥对以及配置 SSH 访问,用户可以安全地远程操作…...
Gas费用是什么?
Gas费用是什么? 每5个Byte 需要1个GasGasLimit 用来限制合约最多执行多少次运算GasPrice 每次计算需要支付的费用在Web3的语境中,尤其是在以太坊(Ethereum)这样的区块链平台上,Gas费是一个核心概念。以下是关于Gas费的详细解释: 1. 定义 Gas是以太坊网络上的计算单位,…...
大语言模型(LLM)的子模块拆拆分进行联邦学习;大语言模型按照多头(Multi-Head)拆分进行联邦学习
目录 大语言模型(LLM)的子模块拆拆分进行联邦学习 方式概述 简单示例 大语言模型按照多头(Multi-Head)拆分进行联邦学习 场景设定 多头拆分与联邦学习 示例说明 大语言模型(LLM)的子模块拆拆分进行联邦学习 大语言模型(LLM)的子模块拆分进行联邦学习,主要涉及…...

Qt 概述
1. Qlabel HelloWorld 程序 使用纯代码实现 // widget.cpp Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);// 给当前这个lable对象,指定一个父对象QLabel* label new QLabel(this);// C语言风格的字符串可以直接…...

C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...

基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...
HybridVLA——让单一LLM同时具备扩散和自回归动作预测能力:训练时既扩散也回归,但推理时则扩散
前言 如上一篇文章《dexcap升级版之DexWild》中的前言部分所说,在叠衣服的过程中,我会带着团队对比各种模型、方法、策略,毕竟针对各个场景始终寻找更优的解决方案,是我个人和我司「七月在线」的职责之一 且个人认为,…...
从零手写Java版本的LSM Tree (一):LSM Tree 概述
🔥 推荐一个高质量的Java LSM Tree开源项目! https://github.com/brianxiadong/java-lsm-tree java-lsm-tree 是一个从零实现的Log-Structured Merge Tree,专为高并发写入场景设计。 核心亮点: ⚡ 极致性能:写入速度超…...
【java】【服务器】线程上下文丢失 是指什么
目录 ■前言 ■正文开始 线程上下文的核心组成部分 为什么会出现上下文丢失? 直观示例说明 为什么上下文如此重要? 解决上下文丢失的关键 总结 ■如果我想在servlet中使用线程,代码应该如何实现 推荐方案:使用 ManagedE…...

初探用uniapp写微信小程序遇到的问题及解决(vue3+ts)
零、关于开发思路 (一)拿到工作任务,先理清楚需求 1.逻辑部分 不放过原型里说的每一句话,有疑惑的部分该问产品/测试/之前的开发就问 2.页面部分(含国际化) 整体看过需要开发页面的原型后,分类一下哪些组件/样式可以复用,直接提取出来使用 (时间充分的前提下,不…...
LeetCode 0386.字典序排数:细心总结条件
【LetMeFly】386.字典序排数:细心总结条件 力扣题目链接:https://leetcode.cn/problems/lexicographical-numbers/ 给你一个整数 n ,按字典序返回范围 [1, n] 内所有整数。 你必须设计一个时间复杂度为 O(n) 且使用 O(1) 额外空间的算法。…...

分布式光纤声振传感技术原理与瑞利散射机制解析
分布式光纤传感技术(Distributed Fiber Optic Sensing,简称DFOS)作为近年来迅速发展的新型感知手段,已广泛应用于边界安防、油气管道监测、结构健康诊断、地震探测等领域。其子类技术——分布式光纤声振传感(Distribut…...