初识STL:string1
1.STL简介1.1介绍STL是c标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包含数据结构和各种常见算法的软件框架1.2STL的六大组件容器算法迭代器仿函数空间配置器配接器其中容器就是我们之前学过的数据结构,* 仿函数,配接器,空间配置器我们之后详细讲解 *,算法包含一些常用算法,比如逆置,交换等等.我们之前自己实现过各种数据结构,每种数据结构都有截然不同的遍历方式,如果每个结构在库中都有一个自己的遍历函数那也太麻烦了.这就是迭代器的作用之一:每个数据结构都有一个迭代器组件用来遍历数据,那么如果在一个算法中需要遍历,传递迭代器模板就可以了.这就使得容器 算法相互脱离,降低耦合度,算法更加通用2.迭代器,auto和范围for2.1.迭代器的使用begin()和end()函数begin和end用来确定迭代器的遍历范围,值得注意的是这两个函数都有一个const成员函数重载:const修饰成员函数确保此函数不会修改调用它的对象.虽然只写一个const类型就够用—不管是普通对象还是const对象都可以调用,编译器允许权限的缩小,会把普通类型变成const修饰类型.但是如果我传递一个普通对象希望在函数中能修改结果却调用了const函数,这是不合理的.因此设置重载,各自调用各自的.其他begin和end虽然在string中为迭代器写了很多begin和end,但是常用的只有普通迭代器和反向迭代器:iterator本身不能被const修饰,因为迭代器想要遍历就需要,所以取名叫const_iterator.rbegin和rend会分别得到末尾和开头从后往前遍历.2.2.auto与范围for相比迭代器来讲范围for方便很多,不需要主动调用范围也不用在循环中遍历.3.string的常用接口3.1构造函数构造中比较常用的是无参默认构造,字符串构造和拷贝构造第三种构造方式中的npos是string中的一个静态成员变量,存储int的最大值,因为构造时开不了这么大的空间.所以当不传递长度的时候就会使用缺省值npos,将pos位置之后的值全部拷贝(同理当传递的长度大于实际长度时不会报错,也会只拷贝到结束)3.2赋值重载3.3string::sizesize_t size() const;用于计算返回一个对象的长度.string::lenth和它的用途一样,只是人们认为这个函数名不通用(string存储字符串,可以叫做长度,但是像树,图等这些结构叫做长度不太合适)3.4string::max_size用于返回一个字符串中可能存储的理论最大值,但是没有什么实际意义,约等于2G,实际上开不出这么大的空间.3.5string::push_back和之前顺序表的原理一样,在每一次尾插的时候都会检查空间是否足够,不够的话会进行扩容.在vs编译器下除了第一次扩容是二倍,之后都是1.5倍扩大空间,而在Linux系统下是2倍扩大.string::capacity函数用于查看当前开辟的空间.3.6operator[]operator[]是更适合string使用的遍历修改方式,类似于普通数组的下标访问3.7operatoroperator用来在字符串后面追加字符,支持传递string对象,字符串以及单个字符.3.8appendappend也是在字符串末尾继续追加字符,提供了一系列重载,但是相比于并不常用.3.9insert一个插入函数,重载了多样的插入方式,下面只介绍几种常用类型3.10replace提供多种重载的替换函数3.11eraseerase用于删除指定位置长度的数据,如果不传值就默认全部删除,迭代器版本的暂时不详细展开3.12assign使用来源对象的内容替换调用对象内容3.13eraseerase用来删除指定长度的数据,如果传递范围过长或不传递范围使用缺省值npos,就会直接删除到末尾4.有关空间的string接口4.1resizeresize用来设置字符串长度4.2reservereserve是一个调整空间大小的函数.如果要扩大当前空间,编译器绝大多数情况下会执行异地扩容(开辟一块新空间,拷贝数据,释放旧空间),不过由于一些对齐,编码原因,实际扩容出的大小要比需求的大一些.如果我们能提前知道某个对象最多需要多少空间就可以提前使用reserve把空间开出来,减少后续的扩容次数提高效率.如果传递的值比空间小,也就是说想要让编译器缩容.这种情况是不被约束的,编译器的行为大多都是无视该指令,什么都不做,如果想要缩容需使用专门提供的shrink_to_fit函数.缩容的过程是开辟新的小空间,(语法不允许部分释放空间,只能整块释放)拷贝部分数据,释放原空间,消耗不必扩容小,这是一种用时间换空间的低效策略.并且在缩容后如果添加数据就又会立即扩容,使得消耗更大.如果不是空间实在紧缺,尽量避免缩容行为4.3shrink_to_fit缩容函数,会将空间缩减到size大小.但是这个函数也是一种不受约束的行为,编译器会尽力缩小到size,但也可能比size稍大一点.不推荐使用该函数.4.4clear删除对象中的内容,将size变为0,空间不变4.5empty检查字符串是否为空(size0),为空则返回true,否则返回false5.其他比较常用的成员函数5.1c_strc_str用于一些特殊情况下,比如只提供c语言接口无法调用string的时候用c_str返回char*指针进行读取等操作5.2copy把调用对象中从pos位置开始的len长度内容拷贝到数组s中,用的很少.5.3findfind是一个很常用的查找函数.找不到的时候会返回-1,但是由于返回类型是size_t,所以会变成int的最大值.strings3(Searches the string for the first occurrence);size_t i5s3.find( );while(i5!string::npos)//npos是静态成员变量,访问时需要突破类域{s3.replace(i5,1,%%);i5s3.find( ,i5);}couts3endl;//这样写需要大量移动 太费时间string s4;for(autoch:s3)//范围for{if(ch! ){s4ch;}else{s4%%;}}autoit1s3.begin();//迭代器while(it1!s3.end()){if((*it1)! ){s4(*it1);}else{s4%%;}it1;}for(size_t i0;is3.size();i)//下标访问{if(s3[i]! ){s4s3[i];}else{s4$$;}}couts4endl;//以上三种遍历方法都可以达到目的,空格替换成%%5.4rfindrfind是从后往前寻找.参数pos是从后往前开始的位置strings3(Searches the string for the first occurrence);strings4( );size_t i5s3.rfind(s4);while(i5!string::npos){s3.replace(i5,1,%%);//i5 s3.rfind(s4,i5); size_t rfind (const string str, size_t pos npos) const//i5 s3.rfind( , i5); size_t rfind (const char* s, size_t pos npos) const//i5 s3.rfind( , i5, 1); size_t rfind (const char* s, size_t pos, size_t n) consti5s3.rfind( ,i5);//size_t rfind (char c, size_t pos npos) const}couts3endl;5.5find_first_of5.6find_first_not_of5.7substrsubstr和构造函数的某一个重载功能类似,将调用对象从pos位置开始长度len的字符串作为一个新字符串返回5.8operator注意到operator是一个全局函数,这是为了解决成员函数第一个参数固定为调用对象的问题,全局函数的第一个参数就可以是const char*5.9getline流插入cin的性质类似scanf,读取到空格就停下,如果我们想要读取一行就可以用getline(getline是一个全局函数)getline的重载还支持在遇到特殊符号时停止

相关新闻

思源宋体CN完整指南:7种字重开源中文字体的专业配置终极方案

思源宋体CN完整指南:7种字重开源中文字体的专业配置终极方案

思源宋体CN完整指南:7种字重开源中文字体的专业配置终极方案 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 思源宋体CN是由Adobe与Google联合开发的开源中文字体&#xff…

2026/8/13 11:50:37 阅读更多 →
Python实战:集成百度语音合成TTS,打造智能语音应用

Python实战:集成百度语音合成TTS,打造智能语音应用

1. 项目概述与核心价值最近在做一个智能客服的小项目,需要把文本回复实时转换成语音播报给用户。市面上语音合成的方案不少,但考虑到稳定性、音质和中文支持,百度的语音合成服务(TTS)一直是我的首选。它提供了非常自然…

2026/8/13 11:49:32 阅读更多 →
14 - 《英伟达启示录》深度理解测试(答案)

14 - 《英伟达启示录》深度理解测试(答案)

第1题答案:B解析:A的错误在于“完全退出”和“完全无关”——英伟达并未退出游戏芯片市场(至今仍是重要业务),AI基座也并非“完全无关”。C的错误在于英伟达的核心跃迁并非通过收购实现,而是通过内部技术&a…

2026/8/13 11:49:32 阅读更多 →

最新新闻

智能体面试准备(二十九):主流智能体框架实战——LangGraph、AutoGen、CrewAI 对比与选型踩坑

智能体面试准备(二十九):主流智能体框架实战——LangGraph、AutoGen、CrewAI 对比与选型踩坑

智能体面试准备(二十九):主流智能体框架实战——LangGraph、AutoGen、CrewAI 对比与选型踩坑前面我们把 Agent 的核心能力拆了个遍:ReAct(B12)、Function Calling(B18)、多智能体协作…

2026/8/13 12:54:02 阅读更多 →
27届大模型面试准备(三十):LLM 推理性能优化全栈——KV Cache、连续批处理、投机解码与 PD 分离

27届大模型面试准备(三十):LLM 推理性能优化全栈——KV Cache、连续批处理、投机解码与 PD 分离

27届大模型面试准备(三十):LLM 推理性能优化全栈——KV Cache、连续批处理、投机解码与 PD 分离前面 A25 讲过推理服务化与投机解码的"服务架构视角",A29 讲过长文本推理的"注意力成本视角"。这一篇把推理性能…

2026/8/13 12:54:02 阅读更多 →
27届大模型面试准备(二十九):长文本推理与高效注意力——FlashAttention、稀疏/线性注意力与推理侧长度外推

27届大模型面试准备(二十九):长文本推理与高效注意力——FlashAttention、稀疏/线性注意力与推理侧长度外推

27届大模型面试准备(二十九):长文本推理与高效注意力——FlashAttention、稀疏/线性注意力与推理侧长度外推前面我们讲过长上下文的"位置编码与长度外推"(A24,那是训练侧怎么让模型学会更长位置)…

2026/8/13 12:54:02 阅读更多 →
7个核心质量管控问题

7个核心质量管控问题

一、这个需求最可能出问题的地方在哪里? 核心逻辑 高风险点不是靠经验“猜”,而是通过结构化维度扫描历史缺陷映射,精准锁定薄弱环节,避免测试设计平均用力。 可落地方案:五维风险扫描法 拿到需求后1个工作日内&#x…

2026/8/13 12:54:02 阅读更多 →
Windows 11任务栏歌词插件终极指南:让音乐时刻陪伴你的桌面✨

Windows 11任务栏歌词插件终极指南:让音乐时刻陪伴你的桌面✨

Windows 11任务栏歌词插件终极指南:让音乐时刻陪伴你的桌面✨ 【免费下载链接】Taskbar-Lyrics BetterNCM插件,在任务栏上嵌入歌词,目前仅建议Windows 11 项目地址: https://gitcode.com/gh_mirrors/ta/Taskbar-Lyrics 还在为听歌时频…

2026/8/13 12:54:02 阅读更多 →
零门槛闯关攻略:给Audacity装上OpenVINO AI插件,人声分离、智能降噪、语音转录全本地搞定

零门槛闯关攻略:给Audacity装上OpenVINO AI插件,人声分离、智能降噪、语音转录全本地搞定

零门槛闯关攻略:给Audacity装上OpenVINO AI插件,人声分离、智能降噪、语音转录全本地搞定 【免费下载链接】openvino-plugins-ai-audacity A set of AI-enabled effects, generators, and analyzers for Audacity. 项目地址: https://gitcode.com/gh_m…

2026/8/13 12:53:01 阅读更多 →

日新闻

Visual Studio新建项目解决方案为空:系统性排查与修复指南

Visual Studio新建项目解决方案为空:系统性排查与修复指南

1. 问题现象与本质剖析如果你是一位.NET开发者,或者正准备踏入这个领域,那么Visual Studio(后面简称VS)绝对是你绕不开的伙伴。但有时候,这个伙伴会跟你开一个不大不小的玩笑:你满怀期待地点击“创建新项目…

2026/8/13 0:00:09 阅读更多 →
长春建设厅网站:普通人买房办事必看的真实指南与避坑攻略

长春建设厅网站:普通人买房办事必看的真实指南与避坑攻略

说实话,每次提起“长春建设厅网站”这几个字,我心里都挺有感触的。不是因为它有多高大上,也不是因为那里藏着什么不可告人的秘密,恰恰相反,是因为它太“接地气”了,或者说,它是咱们普通人想要在这个城市好好生活、安稳买房时,必须得翻过的一座“数据山”。很多新朋友第…

2026/8/13 0:00:09 阅读更多 →
Windows家庭版远程桌面多用户破解完整指南:RDPWrap终极解决方案

Windows家庭版远程桌面多用户破解完整指南:RDPWrap终极解决方案

Windows家庭版远程桌面多用户破解完整指南:RDPWrap终极解决方案 【免费下载链接】rdpwrap.ini RDPWrap.ini for RDP Wrapper Library by StasM 项目地址: https://gitcode.com/GitHub_Trending/rd/rdpwrap.ini 你是否曾为Windows家庭版无法支持多用户远程桌面…

2026/8/13 0:00:09 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/13 2:38:34 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/13 10:41:52 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/13 10:41:51 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/13 10:41:50 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/13 10:41:49 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/13 10:41:49 阅读更多 →