C++ 标准库类型string

news2024/12/29 9:54:10

C/C++总述:Study C/C++-CSDN博客 

目录

定义和初始化string对象 

string的增

使用push_back进行尾插

使用insert插入 

使用append函数完成string的拼接

string的删

使用pop_back进行尾删

使用erase删除

string的查

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

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

使用compare函数完成比较

string的改

使用replace函数完成string的替换

​编辑

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

string的大小和容量 

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

使用max_size函数获取string对象对多可包含的字符数

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

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

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

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

使用empty判断对象是否为空

string中元素的访问

[ ]+下标

使用at访问对象中的元素

使用范围for访问对象中的元素

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

迭代器的实现 

string中与迭代器相关的函数

与正向迭代器相关的函数

与反向迭代器相关的函数

string与字符串之间的转换

将字符串转换为string

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

string中子字符串的提取

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

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

getline函数


标准库类型 string 表示可变长的字符序列,使用 string 类型必须首先包含 string 头文件。作为标准库的一部分,string 定义在命名空间 std 中。

#include <string>
using std::string;

定义和初始化string对象 

string (1)

复制赋值操作符

string& operator= (const string& str);

c-string (2)

C字符串赋值操作符

string& operator= (const char* s);

character (3)

单个字符赋值操作符

string& operator= (char c);

initializer list (4)

初始化列表赋值操作符

string& operator= (initializer_list<char> il);

move (5)

移动赋值操作符

string& operator= (string&& str) noexcept;
/*复制赋值操作符 (Copy Assignment Operator): 复制赋值操作符 = 用于将另一个string对象的内容复制到当前对象中。如果可能的话,它应该删除当前对象中已有的内容,并分配新的内存来存储复制的数据。*/
string& operator= (const string& str) {
    // 删除当前字符串的内容
    delete[] data;
    
    // 分配新的内存并复制内容
    size = str.size;
    capacity = str.capacity;
    data = new char[capacity];
    memcpy(data, str.data, size);

    return *this;
}
/*C字符串赋值操作符 (C-String Assignment Operator): 当一个string对象被赋值为一个C风格的字符串(char*类型)时,这个操作符被用来将C字符串的内容转换为string对象。*/
string& operator= (const char* s) {
    // 删除当前字符串的内容
    delete[] data;

    // 初始化大小和容量
    size = strlen(s);
    capacity = size; // 假设s字符串长度不会超过预期

    // 分配内存并复制内容
    data = new char[capacity];
    memcpy(data, s, size);

    return *this;
}
/*单个字符赋值操作符 (Single Character Assignment Operator): 这个操作符允许将一个字符赋值给string对象, effectively将字符串的内容替换为该字符。*/
string& operator= (char c) {
    // 删除当前字符串的内容
    delete[] data;

    // 初始化大小和容量
    size = 1;
    capacity = 1;

    // 分配内存并复制内容
    data = new char[capacity];
    data[0] = c;

    return *this;
}
/*初始化列表赋值操作符 (Initializer List Assignment Operator): 使用initializer_list<char>可以高效地初始化string对象,特别是当字符串很大,且全部内容已知时。*/
string& operator= (initializer_list<char> il) {
    // 删除当前字符串的内容
    delete[] data;

    // 初始化大小和容量
    size = il.size();
    capacity = size; // 假设初始化列表长度不会超过预期

    // 分配内存并复制内容
    data = new char[capacity];
    std::copy(il.begin(), il.end(), data);

    return *this;
}
/*移动赋值操作符 (Move Assignment Operator): move操作符用于高效地转移资源,如内存分配给当前对象,而释放掉传递给操作符的string对象的资源。*/
string& operator= (string&& str) noexcept {
    // 交换数据成员,这里假设data是一个指针,size和capacity是相应的尺寸和容量变量
    std::swap(data, str.data);
    std::swap(size, str.size);
    std::swap(capacity, str.capacity);

    return *this;
}

string的增

使用push_back进行尾插

void push_back (char c);

eg:

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

	return 0;
}

使用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

 eg:

#include <iostream>
#include <string>
using namespace std;
int main()
{
	string s("C"); //C

	//insert(pos, str)在pos位置插入字符串str
	s.insert(1, "S"); //CS

	//insert(pos, string)在pos位置插入string对象
	string t("D");
	s.insert(2, t); //CSD

	//insert(pos, char)在pos位置插入字符char
	s.insert(s.end(), 'N'); //CSDN
	
	cout << s << endl; //CSDN
	return 0;
}

 

使用append函数完成string的拼接

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

eg:

	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的删

使用pop_back进行尾删

void pop_back();

eg:

int main()
{
    string s1("Hello World");
	
	s1.pop_back();
	//Hello World

	s1.pop_back();
	//Hello Worl

	s1.pop_back();
	//Hello Wor

    return 0;
}

使用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)上所有字符

eg:

int main()
{    
    string s1("Hello World");
	//Hello World

	s1.erase(6, 3);		//erase(pos, n)删除pos位置开始的n个字符
	//Hello ld
	
	s1.erase(s1.end() - 2);	//erase(pos)删除pos位置的字符
   	//Hello d

	s1.erase(s1.begin() + 1, s1.begin() + 3);	//erase(pos1, pos2)删除[pos1,pos2)上所有字符
	//Hlo d

    return 0;
}

string的查

使用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表示查找起始位置,
默认从字符串开头开始查找。*/

eg:

    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

使用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表示查找起始位置,
默认从字符串开头开始查找。*/

eg:

    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; //53

使用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)的大小关系。*/

如果调用函数的字符串小于参数字符串,则返回负值

如果调用函数的字符串等于参数字符串,则返回零

如果调用函数的字符串大于参数字符串,则返回正值

eg:

    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; //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);

eg:

    string s("hello world");

	//replace(pos, len, str)将pos位置开始的len个字符替换为字符串str
	s.replace(0, 4, "HELLO"); 
	//HELLOo world

	//replace(pos, len, n, char)将pos位置开始的len个字符替换为n个字符char
	s.replace(10, 3, 3, '!'); 
	//HELLOo wor!!!

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

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

eg:

	string s1("Hello");
	string s2("World");
    string s3("gghhh");

	//void swap (string& x, string& y);
	s1.swap(s2);

	//void swap (string& str);
	swap(s2, s3);

string的大小和容量 

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

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

eg:

	string s1("Hello");
	string s2("World");

	auto size = s1.size();		//5
	auto length = s2.length();	//5

使用max_size函数获取string对象对多可包含的字符数

size_t max_size() const;

eg:

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

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

size_t capacity() const;

eg:

	string s1("Hello World");

	cout << s1.capacity() << endl;		//15

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

void resize (size_t n);
void resize (size_t n, char c);

当n大于size时,若给出字符c,则用c来填充,否则用‘\0’来填充.

当n小于size时,则将size缩小到n

eg:

    string s1("CSDN");
	s1.resize(6, '!');		//CSDN!!
	s1.resize(3);			//CSD

	string s2("CSDN!!!!!");	//CSDN!!!!!
	s2.resize(20, '*');		//CSDN!!!!!***********

若给出的n大于对象当前的capacity,则capacity也会根据自己的增长规则进行扩大。

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

void reserve (size_t n = 0);

当n大于对象当前的capacity时,将capacity扩大到n或大于n。

当n小于对象当前的capacity时,什么也不做。

eg:

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

	s1.reserve(20);
	cout << s1.size() << ' ' << s1.capacity() << endl;
	//5 31

	s1.reserve(2);
	cout << s1.size() << ' ' << s1.capacity() << endl;
	//5 31

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

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

void clear();

eg:

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

	s1.clear();
	cout << s1 << endl;		//空

使用empty判断对象是否为空

bool empty() const;

若为空,返回1;

不为空,返回0。 

eg:

	string s("CSDN");
	cout << s.empty() << endl; //0

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

string中元素的访问

[ ]+下标

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

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

eg:

	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

使用at访问对象中的元素

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

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

eg:

	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

使用范围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; //xxxx
	return 0;

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

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

迭代器的实现 

迭代器有普通迭代器以及const修饰的迭代器,所以我们可以实现两种不同的迭代器

其中,const迭代器可读不可写

typedef char* iterator;
typedef const char* const_iterator;
iterator begin()
{
    return _str;
}

iterator end()
{
	return _str + _size;
}

const_iterator begin() const
{
	return _str;
}
const_iterator end() const
{
	return _str + _size;
}

string中与迭代器相关的函数

与正向迭代器相关的函数

begin函数:返回一个指向字符串第一个字符的迭代器。

	  iterator begin();
const_iterator begin() const;

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

	  iterator end();
const_iterator end() const;

begin,end为左闭右开  [  )

eg:

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

与反向迭代器相关的函数

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

		reverse_iterator rbegin();
  const_reverse_iterator rbegin() const;

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

		reverse_iterator rend();
  const_reverse_iterator rend() const;

eg:

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

string与字符串之间的转换

将字符串转换为string

	1.
	string s1("hello world");

	2.
	char str[] = "hello world";
	string s2(str);

	cout << s1 << endl; //hello world
	cout << s2 << endl; //hello world

使用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 World
	cout << str2 << endl;		//Hello World

string中子字符串的提取

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

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

eg:

string s1("abcdef");
	string s2;

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

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

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

eg:

	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

getline函数

使用>>进行输入操作时,当>>读取到空格便会停止读取,所以不能用>>将一串含有空格的字符串读入到string对象中。这时,就需要用getline函数完成一串含有空格的字符串的读取操作了。

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

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

eg:

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

用法2:getline函数将从is中提取到的字符存储到str中,直到读取到delim前一字符为止。

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

eg:

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

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

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

相关文章

【MATLAB源码-第159期】基于matlab的胡桃夹子优化算法(NOA)机器人栅格路径规划,输出做短路径图和适应度曲线。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 胡桃夹子优化算法&#xff08;Nutcracker Optimization Algorithm, NOA&#xff09;是一个灵感来源于胡桃夹子的故事的元启发式优化算法。这个故事中&#xff0c;胡桃夹子是一个能够将坚果壳轻易地破开以获取内部果仁的工具。…

腾讯云99元服务器有什么猫腻?为什么这么便宜?

腾讯云服务器99元一年是真的吗&#xff1f;真的&#xff0c;99元优惠购买入口 txybk.com/go/99 折合每天8元1个月&#xff0c;腾讯云99元服务器配置为2核2G3M带宽&#xff0c;2024年99元服务器配置最新报价为61元一年&#xff0c;为什么这么便宜&#xff1f;有什么猫腻吗&#…

【工具】Raycast – Mac提效工具

引入 以前看到同事们锁屏的时候&#xff0c;不知按了什么键&#xff0c;直接调出这个框&#xff0c;然后输入lock屏幕就锁了。 跟我习惯的按Mac开机键不大一样。个人觉得还是蛮炫酷的&#xff5e; 调研 但是由于之前比较繁忙&#xff0c;这件事其实都忘的差不多了&#xff0…

网工内推 | 网络工程师,IE认证优先,最高15K,有项目绩效奖金

01 重庆并联网络科技有限公司 招聘岗位&#xff1a;网络工程师 职责描述&#xff1a; 1、负责集成项目的相关实施工作&#xff08;设备上架安装、网络设备配置、服务器相关系统配置安装、相关软件环境搭建及配置等&#xff09; 2、负责项目现场技术维护与技术支持&#xff1b;…

蓝桥杯day6队列-3.3

目录 1.约瑟夫环 1.注意&#xff01;q.push(q.front()); 2.机器翻译 3.小桥的神秘礼盒 4.餐厅排队 1.约瑟夫环 今天学习了队列的STL写法&#xff0c;来试试这个题。 #include<bits/stdc.h> using namespace std;int main() {int n,m;cin>>n>>m;queue&l…

使用docker安装运行rabbitmq---阿里云服务器

目录 0、阿里云没开端口的得要去安全组规则去添加&#xff1a; 1、下载RabbitMQ镜像&#xff1a; 2、查看镜像是否下载成功&#xff0c;得到docker镜像id&#xff1a; 3、运行RabbitMQ: 4、查看RabbbitMQ容器是否启动成功&#xff1a; 5、启动RabbitMQ中的插件管理 6、访…

postman环境变量全局变量设置

postman环境变量、全局变量设置 在公司中&#xff0c;一般会存在开发环境、测试环境、线上环境等&#xff0c;如果需要在不 同的环境下切换做接口测试&#xff0c;显然我们需要把所有接口的域名进行修改&#xff0c;如果接 口测试用例较多&#xff0c;那么修改会非常费力&…

three.js 射线Ray,三维空间中绘制线框

效果&#xff1a; 代码&#xff1a; <template><div><el-container><el-main><div class"box-card-left"><div id"threejs"></div> <div>{{ res1 }}</div> <div>{{ res2 }}</div><…

vue3的开发小技巧

「总之岁月漫长&#xff0c;然而值得等待。」 目录 父组件调用子组件函数如何访问全局api 父组件调用子组件函数 ref, defineExpose //父组件 代码 <child ref"ch">this.$refs.ch.fn();//子组件 函数抛出 const fn () > { }; defineExpose({ fn });如何…

influxdb2.0插入数据字段类型出现冲突问题解决

一、问题出现 一个学校换热站自控系统&#xff0c;会定时从换热站获取测点数据&#xff0c;并插入到influxdb数据库中。influxdb插入数据时&#xff0c;报错提示&#xff1a; com.influxdb.exceptions.UnprocessableEntityException: failure writing points to database: par…

目标检测——摩托车头盔检测数据集

一、简介 首先&#xff0c;摩托车作为一种交通工具&#xff0c;具有高速、开放和稳定性差的特点&#xff0c;其事故发生率高&#xff0c;伤亡率排在机动车辆损伤的首位。因此&#xff0c;摩托车乘员头盔对于保护驾乘人员头部安全至关重要。在驾乘突发状况、人体受冲击时&#…

白话模电:1.绪论与半导体(考研面试常问问题)

一、什么是信号&#xff1f;什么是电信号&#xff1f; 信号反映消息的物理量&#xff0c;电信号是反应电压或电流变化的物理量。 二、什么是模拟信号&#xff1f;什么是数字信号&#xff1f; 模拟信号是时间和数值上均连续的信号&#xff0c;数字信号是时间和数值上均离散的信号…

Android使用WebView打开外部网页链接

发布Android应用&#xff0c;除了用原生开发外&#xff0c;更多是采用内嵌H5网页的方式来做&#xff0c;便于更新以及多平台使用。 一、第一种方式是直接通过WebView打开外部H5链接。 新建Android工程 直接创建一个工程&#xff0c;点击运行就可以了&#xff0c;打开是个空页…

13.西瓜书——半监督学习

1.概述 &#xff08;1&#xff09; 纯半监督学习 (Pure Semi-Supervised Learning) 纯半监督学习是一种典型的半监督学习方法&#xff0c;它的主要特点是同时利用有标签数据和无标签数据进行模型训练。目标是通过整合这两种类型的数据来提高模型的泛化性能。在这个过程中&#…

httprunner日志跟踪

1. 日志位置 1.1. 关键字&#xff1a;.log generate testcase log: D:\httprunner\demo\logs\082dd63e-56b9-40c1-9392-039dc0a03667.run.log 1.2. 控制台效果 2. 项目位置 3. 日志输出原理 3.1. 测试用例ID和Request ID 为排除故障&#xff0c;每个测试用例将生成唯一ID&…

物联网的商业模式洞察

大约在十年前&#xff08;2014年11月&#xff09;&#xff0c;全球知名管理思想家、哈佛商学院教授迈克尔波特与PTC前首席执行官吉姆赫普尔曼&#xff0c;在《哈佛商业评论》上联合撰写了一篇备受赞誉的文章&#xff0c;题为《智能互联产品如何改变竞争》。在这篇文章中&#x…

羊大师分析羊奶滋养,女性魅力绽放

羊大师分析羊奶滋养&#xff0c;女性魅力绽放 羊奶&#xff0c;自古以来便是滋养身心的天然佳品。它富含多种营养成分&#xff0c;如蛋白质、脂肪、矿物质和维生素等&#xff0c;能够为女性提供全面而均衡的营养支持&#xff0c;帮助她们保持健康与活力。 女性是社会的半边天&…

WordPress建站入门教程:如何选择和设置固定链接结构?

我们成功搭建好WordPress网站后&#xff0c;发布的文章对应的URL地址默认是使用“日期和名称型”&#xff0c;即是网站域名跟着的是年月日&#xff0c;最后是文章标题&#xff0c;如http://www.yigujin.com/2024/03/06/免费响应式WordPress博客主题JianYue/ 为了让我们的文章U…

Python算法题集_搜索二维矩阵

Python算法题集_搜索二维矩阵 题51&#xff1a;搜索二维矩阵1. 示例说明2. 题目解析- 题意分解- 优化思路- 测量工具 3. 代码展开1) 标准求解【矩阵展开为列表二分法】2) 改进版一【行*列区间二分法】3) 改进版二【第三方模块】 4. 最优算法5. 相关资源 本文为Python算法题集之…

LeetCode 2482.行和列中一和零的差值

给你一个下标从 0 开始的 m x n 二进制矩阵 grid 。 我们按照如下过程&#xff0c;定义一个下标从 0 开始的 m x n 差值矩阵 diff &#xff1a; 令第 i 行一的数目为 onesRowi 。 令第 j 列一的数目为 onesColj 。 令第 i 行零的数目为 zerosRowi 。 令第 j 列零的数目为 zer…