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

揭开C++ STL的神秘面纱之string:提升编程效率的秘密武器

目录

🚀0.前言

🚈1.string 构造函数

🚝1.1string构造函数

🚝1.2string拷贝构造函数

🚈2.string类的使用

🚝2.1.查询元素个数或空间

返回字符串中有效字符的个数:size lenth

返回字符串目前所占的空间:capacity  

检验有效字符个数是否为零:empty  

 🚝2.2对字符串容量操作

为字符串预留空间:reserve

将有效字符的个数该成n个,多出的空间用字符c填充:resize

  清空有效字符:clear

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

 2.3.1 [ ]访问

 2.3.2迭代器

 2.3.3反向迭代器

🚈3.增删查改等

🚝3.1增

在字符串后尾插字符c:push_back

 在字符串后追加一个字符串:append

 在字符串后追加字符串str(真香):operator+=

​编辑 插入:insert

 🚝3.2删

 在字符串后尾删除字符:pop_back

 在某处删除:erase

 🚝3.3查

从字符串pos位置开始往后找字符c,返回该字符在字符串中的位置:find

 从字符串pos位置开始往前找字符c,返回该字符在字符串中的位置:rfind

 🚝3.4改

 🚈4.其他

返回C格式字符串:c_str

在str中从pos位置开始,截取n个字符,然后将其返回:substr

​编辑

​编辑获取一行字符串:getline 

💎7.结束语


🚀0.前言

言C++之言,聊C++之识,以C++会友,共向远方。各位博友的各位你们好啊,这里是持续分享C++知识的小赵同学,今天要分享的C++知识是string ,在这一章,小赵将会向大家聊聊C++的string知识 。✊

🚈1.string 构造函数

🚝1.1string构造函数

 我们通过查阅网站得到string构造函数如上,我们主要使用的构造函数是下面这几个

string str1;//空字符串
cout << str1 << endl;
string str2("i love you");//直接传入字符串构造
cout << str2 << endl;
string str3(str2.begin(), str2.end());//利用迭代器去构造
cout << str3;

这三种构造方式都是相当不错的。这里我们可以通过底层看看string内部是如何去构造的;

 我们通过查看它的底层发现它好像就是一个动态数组,那么我们能不能这么用呢?当然是可以的。

 那么这个可以说是非常爽的了。

🚝1.2string拷贝构造函数

 这个我们用起来应该是相当熟悉了。

🚈2.string类的使用

🚝2.1.查询元素个数或空间

返回字符串中有效字符的个数:size lenth

	string str1("1024");cout << str1.size() << endl;//返回有效字符个数cout << str1.length() << endl;//返回有效字符个数

返回字符串目前所占的空间:capacity  

	cout << str1.capacity();//返回字符串目前所占的空间; 

为什么这里的空间和有效字符不一样呢?主要因为其实就和我们之前队列一样,str在最开始的时候也进行了开空间操作,而当里面的字符快要填满时会进行扩容操作。(这个在实现string时候我们还会讲) 

检验有效字符个数是否为零:empty  

需要注意的是这里指的是有效字符个数而不是所占空间

 🚝2.2对字符串容量操作

为字符串预留空间:reserve

	string s;cout << s.capacity() << endl;s.reserve(20);//告诉扩容函数我要放20个字符,你的不够用了,就快点扩容cout << s.capacity() << endl;

当然如果你输入的值小于当前空间一般是不会进行扩容的 。

将有效字符的个数该成n个,多出的空间用字符c填充:resize

	string s;s.resize(10);//将有效字符的个数该成10个,多出的空间用字符'\0'填充cout << s << endl;s.resize(20, 'a');//将有效字符的个数该成20个,多出的空间用字符'a'填充cout << s<<endl;

 这个函数其实内部也有开空间的函数(可能就是reverse),所以当你的字符大于目前的空间时候会给你扩容,然后填上。

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

  清空有效字符:clear

s.clear();//清空有效字符
cout << s.size();

需要注意的是这里只清理字符,不会缩减空间。

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

 2.3.1 [ ]访问

这个访问方式也是我们前面试过的,和数组一样就很爽。

 2.3.2迭代器

迭代器这里,我们可以当成指针一样先用着,等到实现的时候,我们就会知道里面是什么了。

	string::iterator it = s.begin();//这里要指定谁的迭代器while (it != s.end()){cout << *it;it++;}

 2.3.3反向迭代器

方向迭代器与正向迭代器相反。rbegin对应的就是end.

🚈3.增删查改等

🚝3.1增

在字符串后尾插字符c:push_back

	string s;s.push_back('a');//在结尾添加字符'a'cout << s;

 在字符串后追加一个字符串:append

虽然它的实现很多但是我们一般用的也就只有第一个也就是我圈红的那个。

	string s("hello");s.append(" 1024");cout << s << endl;

 在字符串后追加字符串str(真香):operator+=

这个是真香重载了+=使用非常爽。

	string s("hello ");s += "1024";cout << s<<endl;s += ' i';cout << s << endl;

 插入:insert

 插入我们也是非常熟悉了,以前就有

 我个人主要用的就是这一个,给位置插入;(其他的大家可以自己尝试去探索下)

	s.insert(0, "你好");cout << s << endl;

 🚝3.2删

 在字符串后尾删除字符:pop_back

	s.pop_back();//删除尾部字符cout << s << endl;

 在某处删除:erase

 这里我们也主要用第一个

	s.erase(0, 5);//从0位置开始删5个字符cout << s << endl;

 🚝3.3查

从字符串pos位置开始往后找字符c,返回该字符在字符串中的位置:find

 

	string s("abbba");size_t a=s.find("bb", 2);//从2位置开始向后找cout << a << endl;size_t b=s.find('a');//用缺省参数,即从0位置开始向后找cout << b<<endl;size_t c = s.find('a',3);cout << c;

 从字符串pos位置开始往前找字符c,返回该字符在字符串中的位置:rfind

npos即默认最后一个字符位置 

	string s("abbba");size_t b=s.rfind('a');//默认从最后一个位置向前找cout << b << endl;size_t c = s.rfind('a',2);//从2位置向前找cout << c << endl;

 🚝3.4改

其实改的话很简单就用我们之前的【】就行了,很香。

 

 🚈4.其他

返回C格式字符串:c_str

 

在str中从pos位置开始,截取n个字符,然后将其返回:substr

	string a = s.substr(2, 3);//从2位置开始拷贝3个字符,组成字符串返回cout << a<<endl;cout << s;

获取一行字符串:getline 

这个还是比较重要的,比如我们要读取的字符串中有空格就可以用这个。

大家可以先像我这样用着,这里的输入流参数(istream)到后面我们会说。

💎7.结束语

好了小赵今天的分享就到这里了,如果大家有什么不明白的地方可以在小赵的下方留言哦,同时如果小赵的博客中有什么地方不对也希望得到大家的指点,谢谢各位家人们的支持。你们的支持是小赵创作的动力,加油。

如果觉得文章对你有帮助的话,还请点赞,关注,收藏支持小赵,如有不足还请指点,方便小赵及时改正,感谢大家支持!!!

相关文章:

揭开C++ STL的神秘面纱之string:提升编程效率的秘密武器

目录 &#x1f680;0.前言 &#x1f688;1.string 构造函数 &#x1f69d;1.1string构造函数 &#x1f69d;1.2string拷贝构造函数 &#x1f688;2.string类的使用 &#x1f69d;2.1.查询元素个数或空间 返回字符串中有效字符的个数&#xff1a;size lenth 返回字符串目…...

用人工智能,应该怎么掏钱?

人工智能&#xff08;AI&#xff09;服务的发展正快速改变企业和开发者的工作方式&#xff0c;不仅提供了强大的数据分析和预测能力&#xff0c;还涵盖了从自然语言处理到图像识别的广泛功能。然而&#xff0c;理解AI服务的支付模式对成本控制和合理资源分配至关重要&#xff0…...

【Axure高保真原型】移动案例

今天和大家分享多个常用的移动案例的原型模板&#xff0c;包括轮盘滑动控制元件移动、页面按钮控制元件移动、鼠标单击控制元件移动、元件跟随鼠标移动、鼠标拖动控制元件移动、键盘方向键控制元件移动&#xff0c;具体效果可以点击下方视频观看或打开下方预览地址查看哦 【原…...

Bytebase 3.0.0 - AI 助手全面升级

&#x1f680; 新功能 SQL 编辑器里的 AI 助手&#xff1a;支持将自然语言转换成 SQL 语句&#xff0c;解释 SQL 代码&#xff0c;还能帮助发现潜在问题。 支持 SQL Server DML 语句一键回滚。支持 MariaDB 的在线大表变更。新的 SQL 审核规则&#xff1a; 要求为 MySQL 设置 …...

php基础:数据类型、常量、字符串

语法补充&#xff1a; 每句必须以&#xff1b;结尾 echo&#xff1a;能输出一个以上的字符串&#xff0c;英文逗号隔开 print&#xff1a;只能输出一个字符串并返回1 1.数据类型 php可以自动识别数据类型。 php有5种数据类型&#xff1a;String&#xff08;字符串&#xf…...

Discuz发布原创AI帖子内容生成:起尔 | AI原创帖子内容生成插件开发定制

Discuz发布原创AI帖子内容生成&#xff1a;起尔 | AI原创帖子内容生成插件开发定制 在当今互联网快速发展的时代&#xff0c;内容创作成为了网站运营、社交媒体管理和个人博客维护不可或缺的一部分。然而&#xff0c;高质量内容的创作往往耗时耗力&#xff0c;特别是对于需要频…...

el-table在某些条件下禁止选中

el-table在某些条件下禁止选中 废话不多说直接上代码 HTML部分 <el-table v-loading"loading" :data"wmsShipmentOrderList" ref"multipleTable" select"handleSelect" selection-change"handleSelectionChange">&…...

深入探讨 HTTP 请求方法:GET、POST、PUT、DELETE 的实用指南

文章目录 引言GET 方法POST 方法PUT 方法DELETE 方法小结适用场景与特点总结最佳实践 在 API 设计中的重要性 引言 HTTP 协议的背景&#xff1a;介绍 HTTP&#xff08;超文本传输协议&#xff09;作为互联网的基础协议&#xff0c;自 1991 年发布以来&#xff0c;成为客户端和…...

深度学习:元学习(Meta-Learning)详解

元学习&#xff08;Meta-Learning&#xff09;详解 元学习&#xff0c;也称为“学会学习”&#xff0c;是机器学习中的一个重要子领域&#xff0c;旨在开发能够快速适应新任务或环境的模型&#xff0c;即使这些任务的可用数据非常有限。元学习的核心思想是通过经验学习如何学习…...

uniapp展示本地pdf + 自定义标题

概要 本文主要讲述uniapp打包的Android项目如何展示本地的PDF文件&#xff0c;并设置标题 需求分析 1、因为是打包的Android项目展示本地的PDF文件&#xff0c;首先需要拿到这个本地的PDF文件路径 2、如何在uniapp的vue页面中展示PDF&#xff0c;因为没有直接展示PDF文件的…...

国标GB28181设备管理软件EasyGBS国标GB28181-2016平台更换SQLite数据库的步骤

在当今数字化、智能化的时代&#xff0c;视频监控系统已成为各行各业不可或缺的一部分。国标GB28181设备管理软件EasyGBS&#xff0c;作为一款功能强大的国标视频云服务平台&#xff0c;凭借其广泛的应用场景和卓越的性能&#xff0c;在智慧城市、智慧园区、智慧交通、智慧医疗…...

C++基础与实用技巧第三节:内存管理与性能优化

第二章&#xff1a;C基础与实用技巧 第三节&#xff1a;内存管理与性能优化 1. 动态内存的管理策略与技巧 动态内存管理是C编程的核心部分之一&#xff0c;合理管理内存可以极大提高程序的性能和稳定性。在C中&#xff0c;动态内存的分配和释放通常使用new和delete运算符&am…...

【移动应用开发】界面设计(二)实现水果列表页面

续上一篇博客 【移动应用开发】界面设计&#xff08;一&#xff09;实现登录页面-CSDN博客 目录 一、采用ViewBinding实现一个RecyclerView 1.1 在app/build.gradle中添加recyclerview依赖&#xff0c;并打开viewBinding &#xff08;1&#xff09;在app/build.gradle中添加…...

基于Multisim的四人智力竞赛抢答器设计与仿真

1&#xff09;设计任务 设计一台可供 4 名选手参加比赛的智力竞赛抢答器。 用数字显示抢答倒计时间&#xff0c;由“9”倒计到“0”时&#xff0c;无人抢答&#xff0c;蜂鸣器连续响 1 秒。选手抢答时&#xff0c;数码显示选手组号&#xff0c;同时蜂鸣器响 1 秒&#xff0c;倒…...

前端学习---(4)js基础-2

事件: 事件的三要素&#xff1a;事件源、事件、事件驱动程序。 事件处理步骤: &#xff08;1&#xff09;获取事件源&#xff1a;document.getElementById(“box”); // 类似于Android里面的findViewById &#xff08;2&#xff09;绑定事件&#xff1a; 事件源box.事件onclick…...

重生之“我打数据结构,真的假的?”--3.栈和队列(无习题)

栈和队列 C语言中的栈和队列总结 在C语言中&#xff0c;**栈&#xff08;Stack&#xff09;和队列&#xff08;Queue&#xff09;**是两种非常重要的数据结构。它们广泛用于各种应用中&#xff0c;比如内存管理、任务调度、表达式求值等。本文将对这两种数据结构进行详细的介…...

《Python游戏编程入门》注-第2章2

《Python游戏编程入门》的“2.2.5 绘制线条”中提到了通过pygame库绘制线条的方法。 1 相关函数介绍 通过pygame.draw模块中的line()函数来绘制线条&#xff0c;该函数的格式如下所示。 line(surface, color, start_pos, end_pos, width1) -> Rect 其中&#xff0c;第一…...

PoissonRecon学习笔记

1. Screened Poisson Reconstruction (SPR) 源码&#xff1a;https://github.com/mkazhdan/PoissonRecon However, as noted by several researchers, it suffers from a tendency to over-smooth the data. 泊松重建存在过度平滑的现象。 方法&#xff1a;position and gradi…...

腾讯云DBA面试(一面)

摘要:腾讯云前端时间约了个了维护工程师的面试,总结下面试题。 1、oracle索引原理和mysql索引原理的区别,性能差异?b tree 和 b+ tree 区别。 (1) B+树改进了B树, 让非叶子结点只作索引使用, 去掉了其中指向data record的指针, 使得每个结点中能够存放更多的key, 因此能有更…...

Python:背景知识及环境安装

一、计算机的基础概念 1.1 什么是计算机&#xff1f; 最早我们有计算器&#xff0c;但是他只能完成算数运算的功能 而计算机能完成的工作有&#xff1a; &#xff08;1&#xff09;算术运算 &#xff08;2&#xff09;逻辑判断 &#xff08;3&#xff09;数据存储 &#xff08…...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码&#xff0c;专为学校招生场景量身打造&#xff0c;功能实用且操作便捷。 从技术架构来看&#xff0c;ThinkPHP提供稳定可靠的后台服务&#xff0c;FastAdmin加速开发流程&#xff0c;UniApp则保障小程序在多端有良好的兼…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上&#xff0c;看到基于小智 AI DIY 玩具的演示&#xff0c;感觉有点意思&#xff0c;想着自己也来试试。 如果只是想烧录现成的固件&#xff0c;乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外&#xff0c;还提供了基于网页版的 ESP LA…...

Mac软件卸载指南,简单易懂!

刚和Adobe分手&#xff0c;它却总在Library里给你写"回忆录"&#xff1f;卸载的Final Cut Pro像电子幽灵般阴魂不散&#xff1f;总是会有残留文件&#xff0c;别慌&#xff01;这份Mac软件卸载指南&#xff0c;将用最硬核的方式教你"数字分手术"&#xff0…...

【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统

目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索&#xff08;基于物理空间 广播范围&#xff09;2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习

禁止商业或二改转载&#xff0c;仅供自学使用&#xff0c;侵权必究&#xff0c;如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...

push [特殊字符] present

push &#x1f19a; present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中&#xff0c;push 和 present 是两种不同的视图控制器切换方式&#xff0c;它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...

Unity UGUI Button事件流程

场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...

通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器

拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件&#xff1a; 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…...

深度学习之模型压缩三驾马车:模型剪枝、模型量化、知识蒸馏

一、引言 在深度学习中&#xff0c;我们训练出的神经网络往往非常庞大&#xff08;比如像 ResNet、YOLOv8、Vision Transformer&#xff09;&#xff0c;虽然精度很高&#xff0c;但“太重”了&#xff0c;运行起来很慢&#xff0c;占用内存大&#xff0c;不适合部署到手机、摄…...

云原生周刊:k0s 成为 CNCF 沙箱项目

开源项目推荐 HAMi HAMi&#xff08;原名 k8s‑vGPU‑scheduler&#xff09;是一款 CNCF Sandbox 级别的开源 K8s 中间件&#xff0c;通过虚拟化 GPU/NPU 等异构设备并支持内存、计算核心时间片隔离及共享调度&#xff0c;为容器提供统一接口&#xff0c;实现细粒度资源配额…...