揭开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.结束语

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

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

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

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

相关文章

AI赋能R-Meta分析核心技术:从热点挖掘到高级模型、助力高效科研与论文发表

Meta分析是针对某一科研问题&#xff0c;根据明确的搜索策略、选择筛选文献标准、采用严格的评价方法&#xff0c;对来源不同的研究成果进行收集、合并及定量统计分析的方法&#xff0c;现已广泛应用于农林生态&#xff0c;资源环境等方面&#xff0c;成为Science、Nature论文的…

通过ssh端口反向通道建立并实现linux系统的xrdp以及web访问

Content 1 问题描述2 原因分析3 解决办法3.1 安装x11以及gnome桌面环境查看是否安装x11否则使用下面指令安装x11组件查看是否安装gnome否则使用下面指令安装gnome桌面环境 3.2 安装xrdp使用下面指令安装xrdp&#xff08;如果安装了则跳过&#xff09;启动xrdp服务 3.3 远程服务…

混个1024勋章

一眨眼毕业工作已经一年了&#xff0c;偶然进了游戏公司成了一名初级游戏服务器开发。前两天总结的时候&#xff0c;本来以为自己这一年没学到多少东西&#xff0c;但是看看自己的博客其实也有在进步&#xff0c;虽然比不上博客里的众多大佬&#xff0c;但是回头看也算是自己的…

如果自建 ChatGPT,我会如何从 Model、Inference runtime 构建整个系统

ChatGPT 是一个基于 LLM 的对话系统。本文将介绍如何构建一个类似 ChatGPT 的系统&#xff0c;包括从模型、推理引擎到整体架构的构建过程。 系统概览 让我们关注最核心的对话部分。 如上图所示&#xff0c;web 负责与用户进行交互&#xff0c;server 接受用户的对话请求&…

算法的学习笔记—数组中只出现一次的数字(牛客JZ56)

&#x1f600;前言 在数组中寻找只出现一次的两个数字是一道经典的问题&#xff0c;通常可以通过位运算来有效解决。本文将详细介绍这一问题的解法&#xff0c;深入解析其背后的思路。 &#x1f3e0;个人主页&#xff1a;尘觉主页 文章目录 &#x1f970;数组中只出现一次的数字…

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

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

Servlet(三)-------Cookie和session

一.Cookie和Session Cookie和Session都是用于在Web应用中跟踪用户状态的技术。Cookie是存储在用户浏览器中的小文本文件&#xff0c;由服务器发送给浏览器。当用户再次访问同一网站时&#xff0c;浏览器会把Cookie信息发送回服务器。例如&#xff0c;网站可以利用Cookie记住用…

金融工程--pine-script 入门

背景 脚本基本组成 策略实现 实现马丁格尔策略 初始化变量&#xff1a;定义初始资本、初始头寸大小、止损百分比、止盈百分比以及当前资本和当前头寸大小等变量。 更新头寸&#xff1a;创建一个函数来更新头寸大小、止损价格和止盈价格。在马丁格尔策略中&#xff0c;每次亏…

如何在算家云搭建GPT-SOVITS(语音转换)

一、模型介绍 GPT-SOVITS是一款强大的小样本语音转换和文本转语音 WebUI工具。它集成了声音伴奏分离、自动训练集分割、中文ASR和文本标注等辅助工具。 具有以下特征&#xff1a; 零样本 TTS&#xff1a; 输入 5 秒的声音样本并体验即时文本到语音的转换。少量样本 TTS&…

micro-app【微前端实战】主应用 vue3 + vite 子应用 vue3+vite

micro-app 官方文档为 https://micro-zoe.github.io/micro-app/docs.html#/zh-cn/framework/vite 子应用 无需任何修改&#xff0c;直接启动子应用即可。 主应用 1. 安装微前端框架 microApp npm i micro-zoe/micro-app --save2. 导入并启用微前端框架 microApp src/main.ts …

智联招聘×Milvus:向量召回技术提升招聘匹配效率

01. 业务背景 在智联招聘平台&#xff0c;求职者和招聘者之间的高效匹配至关重要。招聘者可以发布职位寻找合适的人才&#xff0c;求职者则通过上传简历寻找合适的工作。在这种复杂的场景中&#xff0c;我们的核心目标是为双方提供精准的匹配结果。在搜索推荐场景下&#xff0c…

leetcode-75-颜色分类

题解&#xff08;方案二&#xff09;&#xff1a; 1、初始化变量n0&#xff0c;代表数组nums中0的个数&#xff1b; 2、初始化变量n1&#xff0c;代表数组nums中0和1的个数&#xff1b; 3、遍历数组nums&#xff0c;首先将每个元素赋值为2&#xff0c;然后对该元素进行判断统…

【开源项目】经典开源项目数字孪生工地——开源工程及源码

飞渡科技数字孪生工地管理平台&#xff0c;以物联网、移动互联网技术为基础&#xff0c;充分应用人工智能等信息技术&#xff0c;通过AI赋能建筑行业&#xff0c;对住建项目内人员、车辆、安全、设备、材料等进行智能化管理&#xff0c;实现工地现场生产作业协调、智能处理和科…

【JavaEE】【多线程】单例模式

目录 一、设计模式1.1 单例模式1.1.1 饿汉模式1.1.2 懒汉模式 1.2 线程安全问题1.3 懒汉模式线程安全问题的解决方法1.3.1 原子性问题解决1.3.2 解决效率问题1.3.3 解决内存可见性问题和指令重排序问题 一、设计模式 在讲解案例前&#xff0c;先介绍一个概念设计模式&#xff…

stm32入门教程--ADC模拟-数字转换器

ADC&#xff08;Analog-Digital Converter&#xff09;模拟-数字转换器 ADC可以将引脚上连续变化的模拟电压转你换位内存中存储的数字变量&#xff0c;建立模拟电路到数字电路的桥梁。 12位逐次逼近型ADC&#xff0c;1us转换时间 输入电压范围&#xff1a;0-3.3V转换结果范围…

Pyramidal Flow使用指南:快手、北大、北邮,开源可免费商用视频生成模型,快速上手教程

什么是 Pyramidal Flow&#xff1f; Pyramidal Flow 是由快手科技、北京大学和北京邮电大学联合推出的开源视频生成模型&#xff0c;它是完全开源的&#xff0c;发布在 MIT 许可证下&#xff0c;允许商业使用、修改和再分发。该模型能够通过文本描述生成最高10秒、分辨率为128…

Embedding 模型和Model 批量推理和多卡部署

批量推理 多卡部署 使用huggingface 【AI大模型】Transformers大模型库&#xff08;七&#xff09;&#xff1a;单机多卡推理之device_map_transformers多卡推理-CSDN博客 首先用 CUDA_VISIBLE_DEVICES1,2,3 python 或者os.environ["CUDA_VISIBLE_DEVICES"] &q…

风力发电场的“守护神”

摘要&#xff1a;作为清洁能源之一&#xff0c;风力发电场近几年装机容量快速增长。8月17日&#xff0c;国家能源局发布1-7月份全国电力工业统计数据。截至7月底&#xff0c;全国累计发电装机容量约27.4亿千瓦&#xff0c;同比增长11.5%。其中&#xff0c;太阳能发电装机容量约…

TCP simultaneous open测试

源代码 /*************************************************************************> File Name: common.h> Author: hsz> Brief:> Created Time: 2024年10月23日 星期三 09时47分51秒**********************************************************************…

转录组上游分析流程(三)

环境部署——数据下载——查看数据(非质控)——数据质控——数据过滤(过滤低质量数据) 测序得到的原始序列含有接头序列和低质量序列&#xff0c;为了保证信息分析的准确性&#xff0c;需要对原始数据进行质量控制&#xff0c;得到高质量序列(Clean Reads)&#xff0c;原始序列…