【C++初阶】string类的常见基本使用

news2024/11/25 16:51:41

在这里插入图片描述

👦个人主页:@Weraphael
✍🏻作者简介:目前学习C++和算法
✈️专栏:C++航路
🐋 希望大家多多支持,咱一起进步!😁
如果文章对你有帮助的话
欢迎 评论💬 点赞👍🏻 收藏 📂 加关注✨


目录

  • 一、什么是STL
  • 二、string类概念总结
  • 三、string类的常用接口(重点)
      • 3.1 常见的四种构造(初始化)
      • 3.2 常见容量操作
        • 3.2.1 size
        • 3.2.2 empty
        • 3.2.3 clear
  • 四、string类对象的修改操作
      • 4.1 push_back
      • 4.2 append
      • 4.3 运算符重载+=
      • 4.4 insert
      • 4.5 erase
      • 4.6 swap
      • 4.7 c_str
      • 4.8 find
      • 4.9 pop_back
      • 4.10 substr
      • 4.11 rfind
      • 4.12 operator+
  • 五、迭代器iterator
      • 5.1 什么是迭代器
      • 5.2 常见的string类迭代器
        • 5.2.1 begin
        • 5.2.2 end
        • 5.2.3 rbegin + rend --- 反向迭代器
        • 5.2.4 const修饰的对象
  • 六、string类遍历操作
      • 6.1 string的底层重载operator[]
      • 6.2 迭代器遍历
      • 6.3 语法糖(范围for)
      • 6.4 补充:迭代器的意义
  • 七、string的读入与输出
      • 7.1 getline - 输入
      • 7.2 puts - 输出
  • 八、string转化为其他类型
  • 九、其他类型转string

一、什么是STL

STL(standard template libaray - 标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。

STL的六大组件:

在这里插入图片描述

二、string类概念总结

  1. string是一个管理字符数组的类

  2. 该类的接口与常规容器的接口基本相同,再添加了一些专门的函数用来操作string的常规操作。例如:push_back等(后面会详细介绍)

  3. string在底层实际是:basic_string;模板类的别名:typedef basic_string<char, char_traits, allocator> string

  4. 在使用string类时,必须包含头文件#include <string>

三、string类的常用接口(重点)

3.1 常见的四种构造(初始化)

  1. 构造空的string类对象,即空字符串
#include <iostream>
#include <string>
using namespace std;

int main()
{
	// 构造空的string类对象s1
	string s1;
	cout << "s1的内容为:" << s1 << endl;

	return 0;
}

【输出结果】

在这里插入图片描述

  1. C语言的格式字符串来构造string类对象
#include <iostream>
#include <string>
using namespace std;

int main()
{
	// 用C格式字符串构造string类对象s2
	string s2("hello world");
	cout << "s2的内容为:" << s2 << endl;

	return 0;
}

【输出结果】

在这里插入图片描述

  1. 拷贝构造函数
#include <iostream>
#include <string>
using namespace std;

int main()
{
	// 用C格式字符串构造string类对象s2
	string s2("hello world");
	// 拷贝构造
	string s3(s2);
	cout << "s3的内容为:" << s3 << endl;

	return 0;
}

【输出结果】

在这里插入图片描述

  1. string类支持赋值运算符重载=
#include <iostream>
#include <string>
using namespace	std;

int main()
{
	string s1 = "hello world";
	cout << s1 << endl;

	s1 = "hello China";
	cout << s1 << endl;

	return 0;
}

【输出结果】

在这里插入图片描述

3.2 常见容量操作

3.2.1 size

返回字符串的有效长度(不包含'\0'

#include <iostream>
#include <string>
using namespace std;

int main()
{
	string s1("hello world");
	int s1_lengrh = s1.size();

	cout << "s1的有效长度为:" << s1_lengrh << endl;

	return 0;
}

【输出结果】

在这里插入图片描述

注意:'\0’是标识字符串结束的特殊字符,不算有效字符!

3.2.2 empty

检测字符是否为空字符串。如果是空字符串返回true,否则返回false

#include <iostream>
#include <string>
using namespace std;

int main()
{
	string s1;
	string s2("hello world");

	cout << s1.empty() << endl;
	cout << s2.empty() << endl;

	return 0;
}

【输出结果】

在这里插入图片描述

3.2.3 clear

清空有效字符clear

#include <iostream>
#include <string>
using namespace std;

int main()
{
	string s2("hello world");

	s2.clear();

	cout << "s2的内容为:" << s2 << endl;

	return 0;
}

【输出结果】

在这里插入图片描述

四、string类对象的修改操作

4.1 push_back

功能:尾插一个字符

#include <iostream>
#include <string>
using namespace	std;

int main()
{
	string s1("h");
	s1.push_back('i');
	cout << s1 << endl;

	return 0;
}

【输出结果】

在这里插入图片描述

4.2 append

功能:尾插字符串

#include <iostream>
#include <string>
using namespace	std;

int main()
{
	string s1("hello ");
	s1.append("world");
	cout << s1 << endl;

	return 0;
}

【输出结果】

在这里插入图片描述

4.3 运算符重载+=

既可以尾插一个字符,也能尾插一个字符串。

#include <iostream>
#include <string>
using namespace	std;

int main()
{
	string s1("h");
	// 尾插一个字符
	s1 += 'i';
	cout <<  "s1 = " << s1 << endl;

	string s2("hello ");
	// 尾插一个字符串
	s2 += "world";
	cout << "s2 = " << s2 << endl;

	return 0;
}

【输出结果】

在这里插入图片描述

4.4 insert

  • 功能:插入字符或者字符串
  • 缺点:效率低,特别是头插

【代码示例】

#include <iostream>
#include <string>
using namespace std;

int main()
{
	string s1("world");
	// 头插
	s1.insert(0, "hello");
	cout << s1 << endl;
	
	// 限制插入的个数
	string s2("hello");
	s2.insert(0, "world", 3);
	cout << s2 << endl;

	// 配合迭代器
	string s3("11111");
	// 尾插3个x
	s3.insert(s3.begin() + 5, 3, 'x');
	cout << s3 << endl;

	return 0;
}

【输出结果】

在这里插入图片描述

4.5 erase

功能:删除某个位置的字符或者字符串

#include <iostream>
#include <string>
using namespace std;

int main()
{

	string s1("hello world");
	// 从下标为2往后删除3个字符
	s1.erase(2, 3);
	cout << s1 << endl;

	string s2("hello world");
	// 不指定删除的个数,该下标往后全删除
	s2.erase(2);
	cout << s2 << endl;

	//头删
	string s3("hello world");
	s3.erase(s3.begin());
	
	//尾删
	s3.erase(s3.end() - 1);
	cout << s3 << endl;
	return 0;
}

【输出结果】

在这里插入图片描述

4.6 swap

功能:交换

#include <iostream>
#include <string>
using namespace std;

int main()
{
	string s1("hello");
	string s2("world");
	s1.swap(s2);
	cout << "s1 = " << s1 << endl;
	cout << "s2 = " << s2 << endl;

	return 0;
}

【输出结果】

在这里插入图片描述

4.7 c_str

功能:将string转化为C字符串

比如printf只能打印内置类型,如果想打印string类型,需要使用c_str

#include <iostream>
#include <string>
using namespace std;

int main()
{
	string s1("hello world");

	printf("%s\n", s1.c_str());

	return 0;
}

【输出结果】

在这里插入图片描述

4.8 find

功能:查找字符。找到第一次出现的字符下标,如果没有找到会返回npos,本质就是-1

#include <iostream>
#include <string>
using namespace std;

int main()
{
	string s1("hello world");
	int pos = s1.find("o");
	cout << "第一次出现的位置:" << pos << endl;

	// 还可以指定查找的起始位置
	pos = s1.find("o", 6);
	cout << "第二次出现的位置:" << pos << endl;

	return 0;
}

【输出结果】

在这里插入图片描述

4.9 pop_back

功能:尾删一个字符

#include <iostream>
#include <string>
using namespace std;

int main()
{
	string s1("hello world");
	s1.pop_back();
	cout << s1 << endl;

	return 0;
}

【输出结果】

在这里插入图片描述

4.10 substr

功能:截取子串

#include <iostream>
#include <string>
using namespace std;

int main()
{
	string s1("hello world");
	// 从下标为0开始往后截取长度为5的子串
	cout << s1.substr(0, 5) << endl;

	// 如果没有第二个参数,默认截到尾
	cout << s1.substr(0) << endl;

	return 0;
}

【输出结果】

在这里插入图片描述

4.11 rfind

功能:从字符串的后面开始往前找第一次出现的字符

#include <iostream>
#include <string>
using namespace std;

int main()
{
	string s1("hello world");
	
	int pos = s1.rfind('o');
	cout << pos << endl;

	return 0;
}

【输出结果】

在这里插入图片描述

4.12 operator+

string类重载了运算符+可以拼接2个字符串

#include <iostream>
#include <string>
using namespace std;

int main()
{
	string s1("hello ");
	string s2("world");

	string s3 = s1 + s2;

	cout << s3 << endl;

	return 0;
}

【输出结果】

在这里插入图片描述

五、迭代器iterator

5.1 什么是迭代器

现阶段可以理解迭代器是像指针一样的类型,但也有可能是指针,也有可能不是指针。

string迭代器的语法形式:

// string::iterator是类型
// it是变量名
string::iterator it = xxx;

5.2 常见的string类迭代器

5.2.1 begin

【文档描述】

在这里插入图片描述

【代码演示】

#include <iostream>
#include <string>
using namespace std;

int main()
{
	string s1("hello world");
	// 返回的是指向字符串的第一个字符
	string::iterator it = s1.begin();

	// 迭代器是像指针一样的类型
	// 因此解引用就可以访问第一个字符
	cout << *it << endl;

	return 0;
}

【程序结果】

在这里插入图片描述

5.2.2 end

【文档描述】

在这里插入图片描述

【代码示例】

#include <iostream>
#include <string>
using namespace std;

int main()
{
	string s1("hello world");
	string::iterator it = s1.end() - 1;

	cout << *it << endl;

	return 0;
}

【输出结果】

在这里插入图片描述

5.2.3 rbegin + rend — 反向迭代器

【文档描述】

在这里插入图片描述

【代码示例】

#include <iostream>
#include <string>
using namespace std;

int main()
{
	string s1("hello world");
	string::reverse_iterator rit = s1.rbegin();

	while (rit != s1.rend())
	{
		cout << *rit;
		rit++;
	}
	cout << endl;

	return 0;
}

【输出结果】

在这里插入图片描述

注:如果觉得string::reverse_iterator太长,可以使用auto代替。

5.2.4 const修饰的对象

注:const修饰的对象不能用普通迭代器

看看以下代码

#include <iostream>
#include <string>
using namespace std;

void print(const string& s)
{
	string::iterator sit = s.begin();
	while (sit != s.end())
	{
		cout << *sit;
		sit++;
	}
	cout << endl;
}

int main()
{
	string s1("hello world");
	//封装print函数来打印
	print(s1);

	return 0;
}

【错误报告】

在这里插入图片描述

const修饰的对象只能用const的迭代器

在这里插入图片描述

【正确代码】

#include <iostream>
#include <string>
using namespace std;

void print(const string& s)
{
	string::const_iterator sit = s.begin();
	while (sit != s.end())
	{
		cout << *sit;
		sit++;
	}
	cout << endl;
}

int main()
{
	string s1("hello world");
	//封装print函数来打印
	print(s1);

	return 0;
}

【输出结果】

在这里插入图片描述

六、string类遍历操作

因为string底层是支持流提取>>,用cout就可以直接打印string字符串的内容,但是打印的结果比较固定。因此以下三种方式既可以访问遍历,也可以对其内容修改打印。

6.1 string的底层重载operator[]

相当于数组下标的访问

#include <iostream>
#include <string>
using namespace std;

int main()
{
	string s2("hello world");

	for (int i = 0; i < s2.size(); i++)
	{
		// 遍历string字符串
		cout << s2[i];
	}
	cout << endl;

	return 0;
}

【输出结果】

在这里插入图片描述

当然还可以对字符串进行修改

以下是将字符串的内容都+1

#include <iostream>
#include <string>
using namespace std;

int main()
{
	string s2("hello world");

	// 修改
	for (int i = 0; i < s2.size(); i++)
	{
		s2[i]++;
	}
	// 输出
	for (int i = 0; i < s2.size(); i++)
	{
		cout << s2[i];
	}
	cout << endl;

	return 0;
}

【输出结果】

在这里插入图片描述

注意:这里需要区分string和普通数组

  • s2[i]的底层是调用s2.operator[](i)函数
    在这里插入图片描述
  • 普通数组的底层是解引用操作
	char ch1[] = "abcdef";
	ch1[0];// 访问下标为0的元素

ch1[0]的底层含义是:*(ch1 + 0)

6.2 迭代器遍历

#include <iostream>
#include <string>
using namespace std;

int main()
{
	string s1("hello world");
	string::iterator it = s1.begin();

	while (it != s1.end())
	{
		cout << *it;
		it++;
	}
	cout << endl;

	return 0;
}

【程序结果】

在这里插入图片描述

当然也可以对字符串的内容进行修改

#include <iostream>
#include <string>
using namespace std;

int main()
{
	string s1("hello world");
	string::iterator it = s1.begin();

	while (it != s1.end())
	{
		(*it)++;
		it++;
	}

	it = s1.begin();

	while (it != s1.end())
	{
		cout << *it;
		it++;
	}
	cout << endl;

	return 0;
}

【输出结果】

在这里插入图片描述

在这里就有的人想,迭代器的代码要写这么多,还不如用下标来访问。所以,迭代器的意义是什么呢? 让我们接着往下看

6.3 语法糖(范围for)

#include <iostream>
#include <string>
using namespace std;

int main()
{
	string s1("hello world");

	for (auto x : s1)
	{
		cout << x;
	}
	cout << endl;

	return 0;
}

【输出结果】

在这里插入图片描述

范围for同样支持修改

#include <iostream>
#include <string>
using namespace std;

int main()
{
	string s1("hello world");

	// 修改
	for (auto& x : s1)
	{
		x++;
	}

	// 输出结果
	for (auto x : s1)
	{
		cout << x;
	}
	cout << endl;

	return 0;
}

【输出结果】

在这里插入图片描述

范围for虽然很香,但是有个致命的缺点:**不能倒着遍历,只有反向迭代器可以倒着遍历。 **

6.4 补充:迭代器的意义

范围for又和迭代器有啥关系呢?迭代器的意义又是什么呢?

  1. 其实,范围for代码短,之所以是这么好用是因为:范围for的底层就是用迭代器实现的!!!

我们可以利用反汇编来看看代码底层:

11111111

范围for的底层就是调用了beginend

  1. 迭代器提供了一种统一的方式访问和修改容器的数据

以下以vector容器为例

#include <iostream>
#include <vector>
using namespace std;

int main()
{
	vector<int> v;
	// 尾插数据
	v.push_back(1);
	v.push_back(2);
	v.push_back(3);
	v.push_back(4);

	// 迭代器
	vector<int>::iterator vit = v.begin();
	while (vit != v.end())
	{
		cout << *vit << ' ';
		vit++;
	}
	cout << endl;

	// 范围for
	for (auto e : v)
	{
		cout << e << ' ';
	}
	cout << endl;

	return 0;
}

【输出结果】

在这里插入图片描述

如果一个容器支持迭代器,那么它必定支持访问for,反之就不一定了。

这里再提一嘴,很多人认为下标访问是主流,但是使用下标访问的空间必须是连续的,所以当我拿出链表,阁下又该如何应对呢?因此迭代器是可以访问链表的。

  1. 迭代器可以和算法配合使用

这里给大家介绍一个浅浅介绍一个算法(后序会补充),-- sort

【文档描述】

在这里插入图片描述

【代码演示】

#include <vector>
#include <iostream>
#include <algorithm> // 算法库头文件
using namespace std;

int main()
{
	vector<int> v;
	// 尾插数据
	v.push_back(10);
	v.push_back(3);
	v.push_back(2);
	v.push_back(5);

	// 迭代器
	cout << "sort前:";
	for (auto x : v)
	{
		cout << x << ' ';
	}
	cout << endl;

	sort(v.begin(), v.end());
	
	// 迭代器打印sort后的结果
	cout << "sort后:";
	vector<int>::iterator vit = v.begin();
	while (vit != v.end())
	{
		cout << *vit << ' ';
		vit++;
	}
	cout << endl;

	return 0;
}

【程序结果】

在这里插入图片描述

七、string的读入与输出

7.1 getline - 输入

注意:cinscanf读取到空格或者回车就不再往后读取了

#include <iostream>
#include <string>
using namespace std;

int main()
{
	string s1;
	// 输入
	cin >> s1;
	// 输出
	cout << s1 << endl;

	return 0;
}

【输出结果】

在这里插入图片描述

getline可以读入空格

#include <iostream>
#include <string>
using namespace std;

int main()
{
	string s1;
	// 输入
	getline(cin, s1);
	// 输出
	cout << s1 << endl;

	return 0;
}

【输出结果】

在这里插入图片描述

7.2 puts - 输出

因为string类重载了流插入<<和流提取>>,因此可以支持cincout的输入输出。除此之外还能用puts来输出string类的字符串(自带换行的)。注意:putsprintf只能打印内置类型的字符串,因此可以用c_str转化为C语言的字符串

#include <iostream>
#include <string>
using namespace std;

int main()
{
	string s1("hello world");
	puts(s1.c_str());

	return 0;
}

【输出结果】

在这里插入图片描述

八、string转化为其他类型

在这里插入图片描述

#include <iostream>
#include <string>
using namespace std;

int main()
{
	// 转整型
	int convert1 = stoi("1111111");
	double convert2 = stod("3.14");
	float convert3 = stof("6.66");

	cout << convert1 << endl;
	cout << convert2 << endl;
	cout << convert3 << endl;

	return 0;
}

【输出结果】

在这里插入图片描述

九、其他类型转string

在这里插入图片描述

#include <iostream>
#include <string>
using namespace std;

int main()
{
	// 整型转string
	string s1 = to_string(1111);

	// double转string 
	string s2 = to_string(3.14);

	return 0;
}

【输出结果】

在这里插入图片描述

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

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

相关文章

组学知识速递(五)|ChIP-seq知多少?

近段时间来&#xff0c;我们合作的ChIP-Seq技术发表的高分成功案例一篇接一篇&#xff0c;您是否心动了呢&#xff1f;本篇文章&#xff0c;总结了ChIP-Seq实验部分重点知识点&#xff0c;开启ChIP-Seq的你绝不要错过&#xff01; Q1 什么是ChIP-Seq&#xff1f; ChIP-Seq即染…

基础堆排序

目录 基础堆排序 一、概念及其介绍 二、适用说明 三、过程图示 基础堆排序

qiankun-微前端--vue2

项目结构 主应用技术&#xff1a; vue2 子应用技术&#xff1a;vue2 项目目录 这里是特意将主子项目分开来的&#xff0c;方便管理 主应用 安装 qiankun npm install qiankun重新定义一个启动端口&#xff0c;防止和其它子应用共用同一个端口&#xff08;vue.config.js&…

激光与光电子学进展, 2023 | 非视域成像技术研究进展

注1&#xff1a;本文系“计算成像最新论文速览”系列之一&#xff0c;致力于简洁清晰地介绍、解读非视距成像领域最新的顶会/顶刊论文(包括但不限于 Nature/Science及其子刊; CVPR, ICCV, ECCV, SIGGRAPH, TPAMI; Light‑Science & Applications, Optica 等)。 本次介绍的论…

UI美工设计的主要职责(合集)

UI美工设计的主要职责1 职责&#xff1a; 1、执行公司的规章制度及专业管理办法; 2、 负责重点项目的原型设计和产品流程设计、视觉设计&#xff0c;优化网站和移动端的设计流程和规范&#xff0c;制定产品 UI/UE规范及文档编写; 3、负责使用PS、AI、illustrator、MarkMan、…

2005-2020年280个地级市绿色全要素生产率测算原始数据

2005-2020年280个地级市绿色全要素生产率测算原始数据 1、时间&#xff1a;2005-2020年 2、来源&#xff1a;中国城市统计年鉴、中国区域统计年鉴、中国能源年鉴、中国环境年鉴等 3、范围&#xff1a;280个地级市 4、指标&#xff1a;年末单位从业人员数、规模以上工业企业…

Django-配置邮箱功能(一):使用django自带的发送邮件功能

一、获取邮箱授权码 以QQ邮箱为例子&#xff1a; 1、进入到设置&#xff0c;找到账户 2、开启POP3等服务&#xff0c;点击管理服务 3、进入管理服务&#xff0c;生成授权码 4、按照要求发送短信就可以了 5、将授权码复制保存&#xff0c;离开界面就看不到了 二、django项目中…

【小曾同学赠书活动】开始啦—〖测试设计思想〗

文章目录 ❤️ 赠书 —《测试设计思想》&#x1f31f; 书籍介绍&#x1f31f; 作者简介图书链接❤️ 活动介绍 — 赠送 3 本 ❤️ 赠书 —《测试设计思想》 首先提问 你知道测试设计思想有哪几类吗&#xff1f;你想奠定扎实的测试理论基础吗&#xff1f;你想改变关于你当前测试…

音视频 vs2017配置FFmpeg

vs2017 ffmpeg4.2.1 一、首先我把FFmpeg整理了一下&#xff0c;放在C盘 二、新建空项目 三、添加main.cpp&#xff0c;将bin文件夹下dll文件拷贝到cpp目录下 #include<stdio.h> #include<iostream>extern "C" { #include "libavcodec/avcodec.h&…

opencv实战项目 手势识别-手势控制鼠标

手势识别系列文章目录 手势识别是一种人机交互技术&#xff0c;通过识别人的手势动作&#xff0c;从而实现对计算机、智能手机、智能电视等设备的操作和控制。 1. opencv实现手部追踪&#xff08;定位手部关键点&#xff09; 2.opencv实战项目 实现手势跟踪并返回位置信息&…

vivo手机如何设置一周后的闹钟提醒?

在日常生活和工作中&#xff0c;每个人都要面临各种各样的事情需要去处理&#xff0c;有一些事情是需要当天去完成的&#xff0c;还有一些任务是需要提前知晓&#xff0c;做好准确&#xff0c;在未来的指定日期去完成的。例如一周后交付项目资料、10天后提交月度工作总结&#…

高忆管理:股票买了后怎么卖?

股票作为一种出资东西&#xff0c;招引了许多出资者的爱好。然而&#xff0c;关于许多新手出资者来说&#xff0c;他们可能会犯一个常见的过错&#xff0c;就是在购买股票后不知道怎么卖出。本文将从多个视点剖析这个问题&#xff0c;为出资者供给一些有用的建议和指导。 首要&…

机器学习深度学习——注意力提示、注意力池化(核回归)

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位即将上大四&#xff0c;正专攻机器学习的保研er &#x1f30c;上期文章&#xff1a;机器学习&&深度学习——常见循环神经网络结构&#xff08;RNN、LSTM、GRU&#xff09; &#x1f4da;订阅专栏&#xff1a;机器…

c刷题(二)

目录 加减混合运算 计算n的k次方 计算非负整数各位之和 字符串逆序 双指针 递归 矩阵计算 矩阵转置 加减混合运算 题目&#xff1a;计算1 / 1 - 1 / 2 1 / 3 - 1 / 4 1 / 5 …… 1 / 99 - 1 / 100 的值&#xff0c;打印出结果。 一般情况我们可以写个循环然后在用条…

pgAdmin开发工具之ERD

pgAdmin 是一个免费的 PostgreSQL 管理与开发平台&#xff0c;这篇文章介绍了它的安装与使用。 今天我们要介绍的是它的一个开发功能&#xff1a;实体关系图&#xff08;ERD&#xff09;工具。 ERD 工具可以使用图形化的方式表示数据库中的表、字段以及表之间的关系。 pgAdmin…

代数学与理论物理中常见的群

代数学与理论物理中常见的群 代数学与理论物理中常见的群 四阶群 六阶群 对称群 二维转动群 三维转动群 三维正交群 群 O3群

【使用go开发区块链】之获取链上数据(03)

上篇文章&#xff0c;我们完成了数据库的连接&#xff0c;本章节&#xff0c;我们将完成ethclient的配置以及初始化 1、ethclient配置 1.1、安装go-ethereum 在命令行终端输入下面代码安装&#xff1a; go get github.com/ethereum/go-ethereum1.2、Ethclient配置 1.2.1、新…

在Qt中使用LoadLibrary无法加载DLL

Qt系列文章目录 文章目录 Qt系列文章目录前言一、问题分析 前言 最近因项目需要使用qt做开发&#xff0c;之前使用LoadLibrary加载dll成功&#xff0c;很庆幸&#xff0c;当一切都那么顺风顺水的时候&#xff0c;测试同事却发现&#xff0c;在windows平台上个别电脑上加载dll会…

百度智能云:千帆大模型平台接入Llama 2等33个大模型,上线103个Prompt模板

大家好&#xff0c;我是herosunly。985院校硕士毕业&#xff0c;现担任算法研究员一职&#xff0c;热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名&#xff0c;CCF比赛第二名&#xff0c;科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的…

LeetCode_03Java_1572. 矩阵对角线元素的和

给你一个正方形矩阵 mat&#xff0c;请你返回矩阵对角线元素的和。 请你返回在矩阵主对角线上的元素和副对角线上且不在主对角线上元素的和。 输入&#xff1a;mat [[1,2,3],[4,5,6],[7,8,9]] 输出&#xff1a;25 解释&#xff1a;对角线的和为&#xff1a;1 5 9 3 7 2…