当前位置: 首页 > news >正文

【C++修行之道】string类的使用

目录

一.C语言中的字符串

二、标准库中的string类 (了解)

2.1 string类(了解)

2.2 帮助文档阅读

三、 string类的常用接口说明

3.1 string类对象的常见构造 

3.2 string类对象的容量操作

3.3 string类对象的访问及遍历操作

字符串类的简单实现

3.4 string类对象的修改操作

3.5 string类非成员函数

3.6 vs和g++下string结构的说明

四、string操作的代码示例


一.C语言中的字符串

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

二、标准库中的string(了解)

2.1 string(了解)

1. 字符串是表示字符序列的类

2. 标准的字符串类提供了对此类对象的支持,其接口类似于标准字符容器的接口,但添加了专门用于操作单字节字符字符串的设计特性。

3. string类是使用char(即作为它的字符类型,使用它的默认char_traits和分配器类型(关于模板的更多信息,请参阅basic_string)。

4. string类是basic_string模板类的一个实例,它使用char来实例化basic_string模板类,用char_traits 和allocator作为basic_string的默认参数(根于更多的模板信息请参考basic_string)。

5. 注意,这个类独立于所使用的编码来处理字节:如果用来处理多字节或变长字符(如UTF-8)的序列,这个类的所有成员(如长度或大小)以及它的迭代器,将仍然按照字节(而不是实际编码的字符)来操作。

C++中对于string的定义是:typedef basic_string string;

  • 使用 typedef 关键字将 basic_string 类定义为一个新的类型 string
  • 这意味着,以后在代码中提到 string 时,其实是在引用 basic_string 类。

也就是说C++中的string类是一个泛型类,由模板而实例化的一个标准类,本质上不是一个标准数据类型。

至于为什么不直接用String标准数据类型而用类是因为编码

每个国家的语言不同 比如说英语使用26个英文字母基本就能表述所有的单词 但是对于中文的字符呢?就要用其他编码方式啊(比如说utf-8)

总结:

  1. string是表示字符串的字符串类
  2. 该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作string的常规操作。
  3. string在底层实际是:basic_string模板类的别名,typedef basic_string<char, char_traits, allocator> string;
  4. 不能操作多字节或者变长字符的序列。
  5. 在使用string类时,必须包含#include头文件以及using namespace std

2.2 帮助文档阅读

(1) empty string constructor (default constructor)

        Constructs an empty string, with a length of zero characters.

(2) copy constructor

        Constructs a copy of str.

(3) substring constructor

        Copies the portion of str that begins at the character position pos and spans len characters         (or until the end of str, if either str is too short or if len is string::npos).

(4) from c-string

        Copies the null-terminated character sequence (C-string) pointed by s.

(5) from buffer

        Copies the first n characters from the array of characters pointed by s.

(6) fill constructor

        Fills the string with n consecutive copies of character c.

(7) range constructor

        Copies the sequence of characters in the range [first,last), in the same order.

(1) 空字符串构造函数(默认构造函数)       

        构造一个空字符串,长度为零个字符。

(2) 拷贝构造函数         

        构造一个 str 的副本。

(3) 子字符串构造函数         

        复制 str 从字符位置 pos 开始并跨越 len 个字符的部分

        (如果 str 太短或 len 是 string::npos,则复制到 str 的末尾)。

(4) 从 C 风格字符串构造         

        复制由 s 指向的以 null 结尾的字符序列(C 字符串)。

(5) 从字符串序列构造         

        复制由 s 指向的字符数组中的前 n 个字符。 

(6) 填充构造函数        

        用 n 个字符 c 的连续副本填充字符串。

(7) 范围构造函数         

        复制范围 [first,last) 中的字符序列,顺序保持不变。

三、 string类的常用接口说明

3.1 string类对象的常见构造 

构造函数函数名称功能说明
string()空字符串构造函数(重点)构造空的 string 类对象,即空字符串
string(const char* s)从 C-string 构造(重点)用 C-string 来构造 string 类对象
string(size_t n, char c)填充构造函数string 类对象中包含 n 个字符 c
string(const string& s)拷贝构造函数(重点)用一个已有的 string 对象 s 构造新的 string 对象
void test01()
{// 常用string s1;string s2("hello world");string s3(s2);// 不常用, 了解string s4(s2, 3, 5);string s5(s2, 3);string s6(s2, 3, 30);string s7("hello world", 5);string s8(10, 'x');cout << s1 << endl;cout << s2 << endl;cout << s3 << endl;cout << s4 << endl;cout << s5 << endl;cout << s6 << endl;cout << s7 << endl;cout << s8 << endl;cin >> s1;cout << s1 << endl;
}

3.2 string类对象的容量操作

函数名称功能说明
size(重点)返回字符串有效字符长度
length返回字符串有效字符长度
capacity返回空间总大小
empty(重点)检测字符串是否为空串,若为空返回 true,否则返回 false
clear(重点)清空有效字符
reserve(重点)为字符串预留空间
resize(重点)将有效字符的个数改为 n 个,多出的空间用指定字符填充

注意:

1. size()与length()方法底层实现原理完全相同,引入size()的原因是为了与其他容器的接口保持一

致,一般情况下基本都是用size()。

2. clear()只是将string中有效字符清空,不改变底层空间大小。

3. resize(size_t n) 与 resize(size_t n, char c)都是将字符串中有效字符个数改变到n个,不同的是当字 符个数增多时:resize(n)用0来填充多出的元素空间,resize(size_t n, char c)用字符c来填充多出的 元素空间。注意:resize在改变元素个数时,如果是将元素个数增多,可能会改变底层容量的大小,如果是将元素个数减少,底层空间总大小不变。

4. reserve(size_t res_arg=0):为string预留空间,不改变有效元素个数,当reserve的参数小于 string的底层空间总大小时,reserver不会改变容量大小。

3.3 string类对象的访问及遍历操作

函数名称功能说明
operator[](重点)返回 pos 位置的字符,用于 const string 类对象的调用
beginendbegin 获取一个字符的迭代器,end 获取最后一个字符下一个位置的迭代器
rbeginrendrbegin 获取一个反向迭代器指向最后一个字符,rend 获取一个反向迭代器指向第一个字符前一个位置
范围 forC++11 支持更简洁的范围 for 新遍历方式

字符串类的简单实现

class String
{
public:// 引用返回// 1.减少拷贝// 2.修改返回对象char& operator[](size_t i){assert(i < _size)return _str[i];}
private:char* _str;size_t _size;size_t _capacity;
};

其中operator[]操作符重载允许通过下标访问和修改字符串中的字符。通过返回字符的引用,可以避免不必要的拷贝并直接修改字符串内容,同时通过assert保证了安全性。

void test02()
{string s1("hello world");cout << s1.size() << endl;// 不计算'\0'// cout << s1.length() << endl;// 访问每个字符并令其++for (size_t i = 0; i < s1.size(); i++){s1[i]++;}cout << endl;s1[0] = 'x';// 越界会被检查// s1[20];// 访问每个字符for (size_t i = 0; i < s1.size(); i++){cout << s1.operator[](i) << " ";cout << s1[i] << " ";}cout << endl;const string s2("hello world");// const 不能修改// s2[0] = 'x';
}

通过重载的 operator[] 访问和修改字符串中的字符,同时也演示了对常量字符串对象进行修改时的限制。代码还包含了越界访问检查,通过 assert 保证安全性。

3.4 string类对象的修改操作

函数名称功能说明
push_back在字符串末尾插入字符 c
append在字符串末尾追加一个字符串
operator+=在字符串末尾追加字符串 str(重点)
c_str返回 C 格式字符串(重点),用于与其他 C/C++ 函数交互,返回的字符串是临时的,不应被修改
find + npos从字符串 pos 位置开始往后找字符 c,返回该字符在字符串中的位置,找不到时返回 string::npos(重点)
rfind从字符串 pos 位置开始往前找字符 c,返回该字符在字符串中的位置(注意:rfind 通常用于查找子字符串,而非单个字符 c 的向前查找,对于单个字符,直接使用 find 从末尾开始查找即可)
substr在字符串中从 pos 位置开始,截取 n 个字符,然后将其返回

注意:

1. 在string尾部追加字符时,s.push_back(c) / s.append(1, c) / s += 'c'三种的实现方式差不多,一般情况下string类的+=操作用的比较多,+=操作不仅可以连接单个字符,还可以连接字符串。

2. 对string操作时,如果能够大概预估到放多少字符,可以先通过reserve把空间预留好。

void test03()
{// 构造string s1("hello world");// 隐式类型转换string s2 = "hello world";const string& s3 = "hello world";// 引用的临时对象, 临时对象具有常性string s4("hello world");push_back(s4);push_back("hello world");
}

3.5 string类非成员函数

函数/运算符功能说明
operator+字符串连接运算符,但尽量少用,因为传值返回导致深拷贝,效率低
operator>> (重点)输入运算符重载,用于从输入流中提取字符串到字符串对象中
operator<< (重点)输出运算符重载,用于将字符串对象的内容发送到输出流中
getline (重点)从输入流中获取一行字符串,直到遇到换行符('\n'),不包括换行符
relational operators (重点)大小比较运算符重载,包括 <<=>>===!=,用于比较两个字符串对象的大小

上面的几个接口大家了解一下,下面的OJ题目中会有一些体现他们的使用。string类中还有一些其他的 操作,这里不一一列举,大家在需要用到时不明白了查文档即可。

3.6 vs和g++下string结构的说明

注意:下述结构是在32位平台下进行验证,32位平台下指针占4个字节。

vsstring的结构

string总共占28个字节,内部结构稍微复杂一点,先是有一个联合体,联合体用来定义string中字

符串的存储空间

  • 当字符串长度小于16时,使用内部固定的字符数组来存放
  • 当字符串长度大于等于16时,从堆上开辟空间
union _Bxty
{ // storage for small buffer or pointer to larger onevalue_type _Buf[_BUF_SIZE];pointer _Ptr;char _Alias[_BUF_SIZE]; // to permit aliasing
} _Bx;

这种设计也是有一定道理的,大多数情况下字符串的长度都小于16,那string对象创建好之后,内

部已经有了16个字符数组的固定空间,不需要通过堆创建,效率高。

其次:还有一个size_t字段保存字符串长度,一个size_t字段保存从堆上开辟空间总的容量

最后:还有一个指针做一些其他事情。

故总共占16+4+4+4=28个字节。

g++string的结构

G++下,string是通过写时拷贝实现的,string对象总共占4个字节,内部只包含了一个指针,该指

针将来指向一块堆空间,内部包含了如下字段:

  • 空间总大小
  • 字符串有效长度
  • 引用计数
struct _Rep_base
{size_type _M_length;size_type _M_capacity;_Atomic_word _M_refcount;
};
  • 指向堆空间的指针,用来存储字符串。

四、string操作的代码示例

void test04()
{string s1("hello world");// 遍历方式1: 下标 + []for (size_t i = 0; i < s1.size(); i++){cout << s1[i] << " ";}cout << endl;// 遍历方式2: 迭代器string::iterator it1 = s1.begin();while (it1 != s1.end()){*it1 += 3;cout << *it1 << " ";++it1;}cout << endl;// 遍历方式3: 范围for// 底层实现方式都是迭代器实现for (auto e : s1){e++;cout << e << " ";}cout << endl;//cout << typeid(it1).name() << endl;/*list<int> lt1;lt1.push_back(1);lt1.push_back(2);lt1.push_back(3);list<int>::iterator it = lt1.begin();while (it != lt1.end()){cout << *it << " ";++it;}cout << endl;for (auto e : lt1){cout << e << " ";}cout << endl;*/
}

//template<class T>
//struct ListNode
//{
//	ListNode <T>* _next;
//	ListNode <T>* _prev;
//	T _data;
//};
//
//template<class T>
//class list
//{
//private:
//	ListNode<T>* _head;
//};void test05()
{const string s1("hello world");//string::const_iterator it1 = s1.begin();auto it1 = s1.begin();while (it1 != s1.end()){// 指向的内容不能修改// *it1 += 3;cout << *it1 << " ";++it1;// const_iterator 本身可以++}cout << endl;/*string::iterator it1 = s1.begin();while (it1 != s1.end()){*it1 += 3;cout << *it1 << " ";++it1;}cout << endl;*/
}

void test06()
{const string s1("hello world");//string::const_iterator it1 = s1.begin();auto it1 = s1.begin();while (it1 != s1.end()){// 不能修改//*it1 += 3;cout << *it1 << " ";++it1;}cout << endl;//string::const_reverse_iterator cit1 = s1.rbegin();auto cit1 = s1.rbegin();while (cit1 != s1.rend()){// 不能修改//*cit1 += 3;cout << *cit1 << " ";++cit1;}cout << endl;string s2("hello world");string::reverse_iterator it2 = s2.rbegin();//auto it2 = s2.rbegin();while (it2 != s2.rend()){//*it2 += 3;cout << *it2 << " ";++it2;}cout << endl;
}

void test07()
{string s1("hello world");cout << s1 << endl;// s1按字典序排序// 排序一部分sort(s1.begin(), s1.end());// 第一个和最后一个参与排序sort(++s1.begin(), --s1.end());// 前五个排序  [0, 5)// sort(s1.begin(), s1.begin() + 5);cout << s1 << endl;
}

void test08()
{string s1("hello world");cout << s1 << endl;s1.push_back('x');cout << s1 << endl;s1.append(" yyyy!!");cout << s1 << endl;s1 += 'y';s1 += "zzzzz";cout << s1 << endl;
}

void test09()
{string s1("hello world");cout << s1 << endl;s1.assign("111111");cout << s1 << endl;// 慎用, 因为效率不高 -> O(N)// 实践中需求也不高string s2("hello world");s2.insert(0, "xxxx");cout << s2 << endl;char ch = 'z';s2.insert(0, 1, ch);s2.insert(0, 1, 'y');cout << s2 << endl;// 没有这个版本的头插// s2.insert(0, 'y');// cout << s2 << endl;s2.insert(s2.begin(), 'y');cout << s2 << endl;s2.insert(s2.begin(), s1.begin(), s1.end());cout << s2 << endl;
}

void test10()
{string s1("hello world");cout << s1 << endl;// 效率不高, 慎用, 和inset类似s1.erase(0,1);// 头删cout << s1 << endl;// s1.erase(5);s1.erase(5,100);cout << s1 << endl;string s2("hello world");s2.replace(5, 1, "%20");// 字符串的替换cout << s2 << endl;// 不建议这样使用,因为要挪动数据string s3("hello world hello char");for (size_t i = 0; i < s3.size();){if (s3[i] == ' '){s3.replace(i, 1, "%20");i += 3;}else {i++;}}cout << s3 << endl;string s4("hello world hello double");string s5;for (auto ch : s4){if (ch != ' '){s5 += ch;}else {s5 += "%20";}}cout << s5 << endl;
}

今天就先到这了!!!、

看到这里了还不给博主扣个:
⛳️ 点赞☀️收藏 ⭐️ 关注!

你们的点赞就是博主更新最大的动力!
有问题可以评论或者私信呢秒回哦。

相关文章:

【C++修行之道】string类的使用

目录 一.C语言中的字符串 二、标准库中的string类 (了解) 2.1 string类(了解) 2.2 帮助文档阅读 三、 string类的常用接口说明 3.1 string类对象的常见构造 3.2 string类对象的容量操作 3.3 string类对象的访问及遍历操作 字符串类的简单实现 3.4 string类对象的修改…...

云原生监控-Kubernetes-Promethues-Grafana

云原生监控-Prometheus 作者:行癫(盗版必究) 引读:本文章所涉及到技术点包括Prometheus、Grafana、Kuebrnetes;Prometheus基于外部构建采集并监控Kubernetes集群以及集群中的应用,例如使用mysql-node-exporter、nginx-node-exporter采集Kuebrnetes集群中的应用数据,使用…...

MySQL高级----InnoDB引擎

逻辑存储结构 表空间 表空间(ibd文件)&#xff0c;一个mysql实例可以对应多个表空间&#xff0c;用于存储记录、索引等数据。 段 段&#xff0c;分为数据段&#xff08;Leaf node segment)、索引段(Non-leaf node segment)、回滚段(Rollback segment)&#xff0c;InnoDB是…...

Docker定时清理

一、循环调度执行 1、检查cron状态 systemctl status crond 2、创建要执行的shell脚本 vim /home/cleanup_docker.sh #! /bin/bash # 清理临时文件 echo $(date "%H:%M:%S") "执行docker清理命令..." docker system prune -af-a 清理包括未使用的镜像 …...

mysql之导入测试数据

运维时经常要这样&#xff1a;mysql改表名&#xff0c;创建一个一样的表不含数据&#xff0c;复制旧表几条数据进去 改变表的名字&#xff1a; RENAME TABLE old_table_name TO new_table_name; 这将把原来的表old_table_name重命名为new_table_name。 创建一个一样的表结构…...

WPScan漏洞扫描工具的介绍及使用

目录 1. 介绍2. 常用参数 1. 介绍 WPScan是Kali Linux默认自带的一款漏洞扫描工具&#xff0c;它采用Ruby编写&#xff0c;能够扫描WordPress网站中的多种安全漏洞&#xff0c;其中包括WordPress本身的漏洞、插件漏洞和主题漏洞&#xff0c;最新版本WPScan的数据库中包含超过18…...

基于单片机的饲料搅拌机控制系统设计

摘要 &#xff1a; 文章主要从软件和硬件两个部分对基于单片机的饲料搅拌机控制系统进行研究设计 。 硬件部分主要由传感器模块 、 信号采集模块、 键盘接入模块 、 LED 显示模块 、 继电器模块以及看门狗模块组成 。 软件部分在 KeilC51 软件基础上重点对控制系统主程序 、…...

Mysql笔记-v2

零、 help、\h、? 调出帮助 mysql> \hFor information about MySQL products and services, visit:http://www.mysql.com/ For developer information, including the MySQL Reference Manual, visit:http://dev.mysql.com/ To buy MySQL Enterprise support, training, …...

Java SpringBoot MongoPlus 使用MyBatisPlus的方式,优雅的操作MongoDB

Java SpringBoot MongoPlus 使用MyBatisPlus的方式&#xff0c;优雅的操作MongoDB 介绍特性安装新建SpringBoot工程引入依赖配置文件 使用新建实体类创建Service测试类进行测试新增方法查询方法 官方网站获取本项目案例代码 介绍 Mongo-Plus&#xff08;简称 MP&#xff09;是一…...

【易捷海购-注册安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…...

antd+vue——实现table组件跨页多选,已选择数据禁止第二次重复选择

需求场景&#xff1a;点击【新增】按钮可以在分页弹窗中跨页多选选择数据后添加到页面中&#xff0c;再次点击【新增】&#xff0c;已经选择过的数据则置灰不让重复选择。 选择后&#xff0c;置灰 点击【确定】数据添加到页面中&#xff0c;可再次点击【新增】进行添加数据 …...

Python采集京东标题,店铺,销量,价格,SKU,评论,图片

京东的许多数据是通过 JavaScript 动态加载的&#xff0c;包括销量、价格、评论和评论时间等信息。我们无法仅通过传统的静态网页爬取方法获取到这些数据。需要使用到如 Selenium 或 Pyppeteer 等能够模拟浏览器行为的工具。 另外&#xff0c;京东的评论系统是独立的一个系统&a…...

数据中台指标管理系统

您所描述的是一个数据中台指标管理系统&#xff0c;它基于Spring Cloud技术栈构建。数据中台是企业数据管理和应用的中心平台&#xff0c;它整合了企业内外部的数据资源&#xff0c;提供数据服务和数据管理能力。以下是您提到的各个模块的简要概述&#xff1a; 1. **首页**&am…...

什么是ThreadLocal以及内存泄漏问题、hash冲突问题

ThreadLocal是什么 ThreadLocal类用来提供线程内部的局部变量 它主要有三大特性&#xff1a; 线程安全: 在多线程并发的场景下保证线程安全传递数据&#xff1a;通过ThreadLocal在同一线程传递公共变量线程隔离&#xff1a;每个线程的变量都是独立的&#xff0c;不会互相影响…...

从零开始做题:My_lllp

题目 给出一张png图片 解题 ┌──(holyeyes㉿kali2023)-[~/Misc/题目/zulu/My_lllp] └─$ python2 lsb.py extract my_lllp.png out.txt my_lllp [] Image size: 1080x1079 pixels. [] Written extracted data to out.txt. ┌──(holyeyes㉿kali2023)-[~/Misc/题目/zul…...

如何编译ffmpeg支持h265(hevc)?

推荐使用这里的文件&#xff1a;https://github.com/runner365/ffmpeg_rtmp_h265 根据你ffmpeg的源码 版本&#xff0c;切换到不同分支即可。 国内cdn方式: 新增codecid hevc/vp8/vp9/opus在rtmp中的codecid没有官方协议定义&#xff0c;由国内众多知名cdn共同制定。 FLV_COD…...

UNIAPP_顶部导航栏右侧添加uni-icons图标,并绑定点击事件,自定义导航栏右侧图标

效果 1、导入插件 uni-icons插件&#xff1a;https://ext.dcloud.net.cn/plugin?nameuni-icons 复制 uniicons.ttf 文件到 static/fonts/ 下 仅需要那个uniicons.ttf文件&#xff0c;不引入插件、单独把那个文件下载到本地也是可以的 2、配置页面 "app-plus":…...

Redis原理-数据结构

Redis原理篇 1、原理篇-Redis数据结构 1.1 Redis数据结构-动态字符串 我们都知道Redis中保存的Key是字符串&#xff0c;value往往是字符串或者字符串的集合。可见字符串是Redis中最常用的一种数据结构。 不过Redis没有直接使用C语言中的字符串&#xff0c;因为C语言字符串存…...

计算机网络 - 万字长文

计算机网络 二、计算机网络2.1 七层模型表格2.2 通俗讲解七层模型2.3 TCP与UDP对比2.4 TCP 三次握手过程==为什么握手是三次,而不是两次或者四次?====三次握手可以携带数据吗?====TCP三次握手失败,服务端会如何处理?====什么是半连接队列?全连接====ISN(Initial Sequence…...

基于java+springboot+vue实现的仓库管理系统(文末源码+lw+ppt)23-499

第1章 绪论 伴随着信息社会的飞速发展&#xff0c;仓库管理所面临的问题也一个接一个的出现&#xff0c;所以现在最该解决的问题就是信息的实时查询和访问需求的问题&#xff0c;以及如何利用快捷便利的方式让访问者在广大信息系统中进行查询、分享、储存和管理。这对我们的现…...

网络安全概述

这里写目录标题 信息安全现状及挑战概念常见的网络安全术语恶意程序的特点 信息安全的脆弱性网络环境的开放性协议栈道的脆弱性&#xff08;缺乏认证和加密 完整性&#xff09; 常见安全攻击传输层 ---TCP SYN Flood攻击分布式拒绝服务攻击(DDOS)社会工程学攻击钓鱼攻击水坑攻击…...

Java传引用问题

本文将介绍 Java 中的引用传递&#xff0c;包括其定义、实现方式、通过引用修改原来指向的内容和通过引用修改当前引用的指向的区别 目录 1、引用传递的概念 2、引用传递的实现方式 3、传引用会发生的两种情况&#xff1a; 通过引用修改当前引用的指向 通过引用修改原来指…...

P8086 『JROI-5』Music

题目背景 请注意到并不正常的时间限制。 本题读入量较大&#xff0c;建议使用较快的读入方式。 小 C 每年都要给丁总氪钱。 题目描述 小 C 喜欢在网易云听歌&#xff0c;她希望你能帮助她计算一下她的网易云的听歌时间。 小 C 有 n 条听歌记录&#xff0c;每条形如 x t&a…...

【Java]认识泛型

包装类 在Java中&#xff0c;由于基本类型不是继承自Object&#xff0c;为了在泛型代码中可以支持基本类型&#xff0c;Java给每个基本类型都对应了一个包装类型。 除了 Integer 和 Character&#xff0c; 其余基本类型的包装类都是首字母大写。 泛型 泛型是在JDK1.5引入的…...

git要忽略对文件的本地修改

要忽略对文件的本地修改&#xff08;即&#xff0c;使Git忽略对该文件的任何未提交更改&#xff09;&#xff0c;可以使用以下命令将该文件标记为假设未更改&#xff08;assume-unchanged&#xff09;&#xff1a; sh git update-index --assume-unchanged runtime/x64/skin/s…...

Linux学习笔记(三)文件权限

一、权限的分类 Linux权限分为r(读取)、w(写入)、x(执行)。我们在终端执行ls -l命令查看文件详细信息显示如下: [root@srv sun]# ls -l 总用量 0 drwxr-xr-x. 2 sun root 6 7月 5 14:05 公共 drwxr-xr-x. 2 sun root 6 7月 5 14:05 模板 drwxr-xr-x. 2 sun root…...

自定义类TMyLabel继承自QLabel ,实现mouseDoubleClickEvent

自定义类TMyLabel &#xff0c;继承自QLabel TMyLabel 中重新实现了 event 方法&#xff0c;重写了mouseDoubleClickEvent 发射信号 在主窗体中放入TMyLabel组件&#xff0c;将TMyLabel mouseDoubleClickEvent 信号&#xff0c; 绑定到实现方法do_doubleClick()槽函数 TMy…...

逻辑回归模型(非回归问题,而是分类问题)

目录&#xff1a; 一、Sigmoid函数&#xff1a;二、逻辑回归介绍&#xff1a;三、决策边界四、逻辑回归模型训练过程&#xff1a;1.训练目标&#xff1a;2.梯度下降调整参数&#xff1a; 一、Sigmoid函数&#xff1a; Sigmoid函数是构建逻辑回归模型的重要函数&#xff0c;如下…...

qt hasPendingDatagrams() 函数

hasPendingDatagrams 是 Qt 框架中 QUdpSocket 类的一个方法&#xff0c;用于检查是否有待处理的数据报到达。在 UDP 通信中&#xff0c;数据以数据报的形式发送&#xff0c;而 QUdpSocket 类提供了用于接收和处理这些数据报的功能。 功能描述 hasPendingDatagrams() 方法用于…...

数据结构第08小节:双端队列

双端队列&#xff08;deque&#xff0c;double-ended queue&#xff09;是一种具有队列和栈特性的数据结构&#xff0c;允许在其两端进行插入和删除操作。在Java中&#xff0c;java.util.Deque接口就是双端队列的实现&#xff0c;而ArrayDeque和LinkedList是其中的具体实现类。…...