STL—string类(1)

一、string类

1、为什么要学习string?

C语言中,字符串是以'\0'结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数,但是这些库函数与字符串是分离开的,不太符合OOP(面向对象编程)的思想,而且底层空间需要用户自己管理,稍不留神可能还会越界访问。在OJ中,有关字符串的题目基本以string类的形式出现,而且在常规工作中,为了简单、方便、快捷,基本都使用string类,很少有人去使用C库中的字符串操作函数。

2、介绍

1. 字符串是表示字符序列的类。
2. 标准的字符串类提供了对此类对象的支持,其接口类似于标准字符容器的接口,但添加了专门用于操作单字节字符字符串的设计特性。
3. string类是使用char(即作为它的字符类型,使用它的默认char_traits和分配器类型
4. string类是basic_string模板类的一个实例,它使用char来实例化basic_string模板类,并用char_traits和allocator作为basic_string的默认参数
5. 注意,这个类独立于所使用的编码来处理字节:如果用来处理多字节或变长字符(如UTF-8)的序列,这个类的所有成员(如长度或大小)以及它的迭代器,将仍然按照字节(而不是实际编码的字符)来操作。

3、特点

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

4、string类常用构造函数

1、string() :构造空的string类对象,即空字符串(重点)
2、string(const char* s) :用C-string来构造string类对象(重点)
3、string(const string&s) 拷贝构造函数(重点)
4、string(size_t n, char c) :string类对象中包含n个字符c
	//空字符串
	string test1;
	//用C-string构造string类对象
	string test2("hello");
	//拷贝构造
	string test3 = test1;
	string test4(test2);
	//使string对象包含n个字符
	string test5(5, 'a');

注意:string类是重载了流插入和留提取运算符,所以其对象可以直接使用cout和cin;

这里只举例常见的构造,具体可前往官网查看文档。

5、string类的析构函数

因为string类支持cin,所以底层实现是右new操作符动态开辟空间的,所以需要析构函数~string()释放,但析构函数是自动调用的,所以平时可以不管。

6、string类对象的遍历和访问

(1)、利用流插入运算符重载

(2)、string类运算符重载了[ ],所以可以用[ ]进行读写(注意[ ]重载提供了两个版本,有个版本用const修饰了this指针,返回值也会const引用,所以只可读不能写,具体查看文档)

int main()
{
	string s1("hello world");
	//读
	for (int i = 0; i < s1.size(); i++)
	{
		cout << s1[i] << " ";
	}
	cout << endl;
	//写:字符串逆序
	int begin = 0;
	int end = s1.size() - 1;
	while (begin < end)
	{
		swap(s1[begin], s1[end]);
		begin++;
		end--;
	}
	cout << s1;
	return 0;
}

(3)、利用迭代器iterator(用法像指针):

int main()
{
	string s1("hello");
	string::iterator it = s1.begin();
	while (it != s1.end())
	{
		cout << *it << " ";
		++it;
	}
	cout << endl;
	return 0;
}

这里begin()指向第一个位置,end()指向数据内容的后一个位置;

因为[ ]只适合部分容器,如树形、哈希结构、链式结构等等只能用迭代器,迭代器才是容器访问的主流。

知道了迭代器,那么容器逆序可以用一个函数模版:

reverse(s1.begin(), s1.end());

reverse函数需要左闭右开的区间,而迭代器的begin和end刚好满足。

需要注意迭代器的两个写法:

(4)、范围for(适用于多种容器,相比上述几种方式是最便捷的,但底层会替换成迭代器)

string s1("hello");

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Fastadmin】自定义404页面

1.修改config.php // 文件路径&#xff1a;application/config.php// 自定义错误码模板http_exception_template > [// 定义404错误的模板渲染404 > APP_PATH . common/view/404/404.html,], 2.需要把debug关闭才能生效 在.env文件中把debug true&#xff0c;改为…

阿里云OSS如果指定某个文件夹给子账户

** 第一步创建子账号 ** 创建完用户不要给任何权限&#xff01; 当前页面切换到认证管理获取AccessKey即可 第二步目录授权 找到对应桶文件目录 上面授权按钮操作 选择添加的子账号账号保存即可&#xff01;

Ardupilot Rpanion 4GLTE 网络性能测试 - 国内中转

Ardupilot Rpanion 4GLTE 网络性能测试 - 国内中转 1. 源由2. 视频效果2.1 整体刷新率不高2.2 网络延迟可接受2.3 带宽增加丢包明显2.4 实测效果流畅 3. 总结 1. 源由 上一次&#xff0c;由于ZeroTier使用了国外服务器&#xff0c;延迟~ 569 ms&#xff0c;花屏、卡顿。 本着…

[自动化]pyautogui的使用

目录 环境 包的版本 前置知识 鼠标控制函数 屏幕与鼠标位置 size() position() OnScreen() 鼠标移动 moveTo() move() 鼠标拖动 dragTo() drag() mouseDown()按下鼠标 mouseUp()松开鼠标 鼠标滚动 scroll() 键盘控制函数 write() press() keyDown()和keyU…

数据分析(二)——导入外部数据,导入Excel数据,CSV文件,txt文件,HTML网页,数据抽取,DataFrame对象的loc属性与iloc属性

一.导入外部数据 1.导入.xIs或.xIsx文件 pd.read_ excel(io,sheet_ name,header) 1.1常用参数说明 ●io:表示.xIs或.xIsx文件路径或类文件对象 ●sheet name:表示工作表&#xff0c;取值如下表所示 ●header:默认值为0&#xff0c;取第一行的值为列名&#xff0c;数据为除列…

深度剖析MyBatis的一级缓存

概述 MyBatis 的一级缓存是什么时候开启的&#xff1f; 在 MyBatis 中&#xff0c; 一级缓存是默认开启的 。 参考&#xff1a;MyBatis缓存的概念 通过场景来理解: 场景一 1、在一个 SqlSession 中&#xff0c;对 User 表进行两次根据 ID 的查询&#xff0c;查看发出 sql …

一步一步带你做网络工程

网络工程怎么做 一、网络设备交换机的应用&#xff1a; 要求&#xff1a;在此接入交换机S3700&#xff0c;上划分两个vlan&#xff0c;vlan10和vlan20分别有两个PC&#xff0c;按拓扑图完成要求&#xff1a; 划分vlan添加端口 sys [Huawei]sys S1 [S1]undo in e [S1]undo t…

2024年重庆等保测评公司有哪些?分别位于哪里?

2024年重庆等保测评公司有哪些&#xff1f;分别位于哪里&#xff1f; 【回答】&#xff1a;目前2024年重庆等保测评公司有四家&#xff0c;具体公司名称以及地址如下&#xff1a; 1、重庆信安网络安全等级测评有限公司&#xff0c;重庆市两江新区黄山大道中段55号附2号麒麟D座…

新手小白如何使用云平台复现论文代码——体验yolov8监控交通流

介绍&#xff1a;YOLOv8 是一种开源目标检测算法&#xff08;模型&#xff09;&#xff0c;是 YOLO(You Only Look Once) 系列算法的最新版本。它使用单次预测框架对图像中的对象进行定位和分类。这种方法可以检测多个对象&#xff0c;并且速度更快&#xff0c;准确率更高。 参…

JavaScript引入方式

JS引入方式 1 内部脚本方式引入2 外部脚本方式引入 1 内部脚本方式引入 说明 在页面中,通过一对script标签引入JS代码script代码放置位置具备一定的随意性,一般放在head标签中居多 代码 <!DOCTYPE html> <html lang"en"><head><meta charset…

照片误删如何恢复?这些方法帮你重拾回忆!

手机照片是我们记录美好时刻的重要工具。但有时我们会因为不小心或者错误操作而导致珍贵照片的丢失。那些与家人、朋友共度的美好时刻、旅途中的风景、重要的纪念日&#xff0c;一旦删除&#xff0c;就如同从记忆中抹去&#xff0c;令人惋惜不已。幸运的是&#xff0c;随着科技…

JavaScript函数声明

JS函数声明 JS中的方法,多称为函数,函数的声明语法和JAVA中有较大区别 语法1&#xff1a;function 函数名 (参数列表){函数体} 语法2&#xff1a;var 函数名 function (参数列表){函数体} 函数说明 函数没有权限控制符不用声明函数的返回值类型,需要返回在函数体中直接return即…

低空经济之无人机

朋友们&#xff0c;今天来聊聊个超酷的话题——低空经济之无人机&#xff01; 无人机不仅让天空变得触手可及&#xff0c;还带来了无尽的商业可能&#xff0c;简直就是新时代的“空中小助手”啊&#xff01; 说到无人机&#xff0c;你们是不是也和我一样&#xff0c;脑海里立马…

20240514基于深度学习的弹性超材料色散关系预测与结构逆设计

论文&#xff1a;Dispersion relation prediction and structure inverse design of elastic metamaterials via deep learning DOI&#xff1a;https://doi.org/10.1016/j.mtphys.2022.100616 1、摘要 精心设计的超材料结构给予前所未有的性能&#xff0c;保证了各种各样的具…

Base64编码

一、什么是BASE64编码 在了解BASE64编码之前&#xff0c;首先回顾一下ASCII码&#xff1a; ASCII码&#xff1a; ASCII&#xff08;American Standard Code for Information Interchang&#xff09;漂亮国信息交换标准代码。 ASCII 码使用7个二进制位来表示一个字符&#xf…

推荐系统学习笔记(一)

A/B测试 随机分桶--哈希函数随机分 如果某个实验组指标明显优于对照组&#xff0c;则值得推全 分层实验 问题&#xff1a;流量不够用怎么办&#xff1f; 同层互斥----避免一个用户被两个实验影响 不同层正交----每层独立随机分配用户 为什么不能全都用正交&#xff1f; 同…

1060 爱丁顿数(测试点5)

solution1&#xff08;测试点5不通过&#xff09; 所谓“E天骑行超过E公里”&#xff0c;注意没有要求是第E天 对于直接判断变成了第E天骑行距离超过E公里&#xff0c;曲解了题意 例如对于 3 1 2 3输出为1 第1天骑行3公里&#xff0c;满足条件&#xff1b;第2天骑行2公里&…

图像数据集可视化查看代码

1 数据集 数据集为10分类问题 2 数据集可视化代码 注意事项&#xff1a; cv2.imread()函数中的路径不能包括中文&#xff0c;否则无法正常读取。 import matplotlib.pyplot as plt import matplotlib.image as mpimg from mpl_toolkits.axes_grid1 import ImageGridimport…

八大设计模式:适配器模式实现栈的泛型编程 | 通用数据结构接口的秘诀(文末送书)

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 引入 哈喽各位铁汁们好啊&#xff0c;我是博主鸽芷咕《C干货基地》是由我的襄阳家乡零食基地有感而发&#xff0c;不知道各位的…

如何在阿里云申请免费SSL证书(三个月有效)

SSL证书主要用于建立Web服务器和客户端间可信的HTTPS协议加密链接&#xff0c;以防止数据在传输过程中被篡改&#xff0c;避免信息泄露。阿里云提供了多种品牌和类型的SSL证书&#xff0c;以满足不同用户的需求。您可以根据自己的预算、域名类型以及网站类型&#xff0c;选择购…