首页
/
行业洞察
/
正文
INDUSTRY INSIGHT · 深度
手把手教你C++——string(上)
📅 2026/11/6 7:45:53
✍️ 爱科研究院
👁 阅读 3,247
1.为什么学习string类文章目录1.为什么学习string类1.3 C语言中的字符串2. 标准库中的string类2.1 string类的了解2.2 string类的常用接口说明2.3 auto和范围for2.3.1 auto关键字2.3.2 范围for1.3 C语言中的字符串C语言中字符串是以‘\0’结尾的一些字符的集合为了方便操作C标准库中提供了一系列str的库函数但是由于这些库函数和字符串是分开的不太符合OOP的思想而且底层空间需要用户自己管理稍不注意可能还会造成越界访问2. 标准库中的string类2.1 string类的了解string类的文档介绍在使用string类时一定要包含头文件#include 和using namespace std2.2 string类的常用接口说明这里就可以看出string的一些优势对比C来说C不需要考虑字符串的大小等因素因为对于C语言来说数据和函数时分开作用的但是对于C来说并不是这样更方便使用stringoperatoroperator[ ]这里两个函数一个是加了const的一个是不加const之所以要写两个的原因是普通字符是可读可写的但是加了const之后就是只能读不能写。如果传过来的是加了const的字符那就必须得用用const修饰的函数写成两个也是让字符能按照自己的情况找到符合的类型这个操作符在C中使用是很方便的使用的场景也是比较多的虽然这些功能看似数组也是可以实现的但是数组有很多功能是无法直接实现的必须要用特定的函数来实现但string就方便很多。而且C语言的数组对于越界问题检查能力是比较弱的但是像string一旦越界就会报错可以让我们及时的修正错误当然也可以实现遍历并且更改原数据的作用诸如此类的还有max_size、capacity等length的用处跟size其实是一样的而且是比size要早的之所以后来又有size是为了适配一些length形容起来不太适配的场景。之所以留下length是因为要向前兼容小试牛刀那我们现在就来做几道题目看看仅仅反转字母这道反转字符的题目首先就是判断该字符到底是不是字母如果是则前后发生反转如果不是那就跳过再继续判断找字符串中第一个只出现一次的字符这道题的核心在于先统计每个字母出现的次数然后再判断该字母是不是只出现了一遍如果是则返回其下标如果不是则返回-1遍历的方式不止for循环一种用迭代器也是可以遍历的这里之所以有const和非const两个版本的原因是加了const时就是可读不可写数值是不能被改变的不加const时可读也可写数值是可以更改的也可以从后往前遍历其实迭代器的使用面远不止于此像我们之前做过的反转字符的题目等这些都可以用迭代器更加高效的完成因为迭代器对于各种类型都是支持的而且会支持运算符重载中的等为什么明明有了for循环还要用迭代器遍历呢其实迭代器才是主流的用法而且适用于各种类型的遍历比如说链表、二叉树这些是for循环无法完成遍历的但是迭代器可以像上代码中其实it并不是简单的而是运算符重载其实是operator;这样就会按照不同的类型来完成遍历从而适用于各种类型还有一种更加简洁的遍历方式就是auto遍历其底层还是依靠迭代器。再来看这一组push_back为插入一个字符appendoperatorinserterasereplaceswappop_back在一部分我们就来看一下reserve和resize的区别,二者相同之处是都是用来预留空间的这样会比扩容效率更加高一点当然也有不同之处reservereserve只对空间预留但是对于空间是否过剩时要缩减这种问题并没有给出详细的答案但是resize给出了定义resize那我们再来看道题目验证一个字符串是否是回文字符串相加我们知道头插损耗是比较大的那我们就可以换一种方式让效率更高2.3 auto和范围for2.3.1 auto关键字在早期C/C中auto的含义是使用auto修饰的变量是具有自动存储器的局部变量后来这个不重要了。在C11中标准委员会变废为宝赋予了auto新的含义即auto不再是一个存储类型的指示符而是作为一个新的类型指示符来指示编译器auto声明的变量必须由编译器在编译时期推导而得。用auto声明指针类型时用auto和auto*是没有任何区别的单用auto声明引用类型是必须要加当在一行声明多个变量时这些变量必须是统一类型否则编译器就会报错因为编译器实际只对第一个类型进行推导然后用推导出来的类型定义其他变量。auto不能作为函数的参数可以做返回值但是也建议谨慎使用(这里是C11时不能够作为参数在后面的版本中就可以)auto做返回值谨慎使用的原因是如果用auto来做返回值如果不写注释别人看你的代码可能就不知道你返回的到底是什么auto不能直接用来声明数组2.3.2 范围for对于一个有范围的集合而言由程序员来说明程序员的范围是多余的有时候还会容易犯错误。因此C111中引入了基于范围的for循环。for循环后的括号由冒号“:”分为两部分第一部分是范围内用于迭代的变量第二部分则表示被迭代的范围自动迭代自动取数据自动判断结束。范围for可以作用到数组和容器对象上进行遍历范围for的底层很简单容器遍历实际就是替换为迭代器这个从汇编层也可以看到在C中遍历数组(只要版本在C11以上)也是支持用auto来遍历的
📌 标签:
工业官网
设计趋势
AI 建站
SEO
获取完整报告 →
RELATED ARTICLES
推荐阅读
2026/11/6 7:45:53
提示词修炼手册-10-从聊天到委派
2026/11/6 7:45:53
AI 应用被高并发打挂怎么办?七道稳定性硬核题深度解析
2026/11/6 7:45:53
前端没死,但只会前端会被淘汰?收藏!小白程序员必看大模型转型指南!
2026/11/6 8:51:08
Palantir 的“本体论”-中国式落地实践
2026/11/6 8:51:08
已有ERP,还需要单独上费控系统吗?开灵科技、金蝶星瀚与浪潮海岳对比
2026/11/6 8:51:08
DeepSeek LeetCode 523. 连续的子数组和 Java实现
2026/11/6 8:51:07
DeepSeek LeetCode 528. 按权重随机选择 Java实现
2026/11/6 8:51:06
DeepSeek LeetCode 526. 优美的排列 Java实现
2026/11/6 8:46:06
God‘s Eye View 本地部署怎么做:免密钥免费启动真实 3D 地球仪的完整指南
2026/11/6 1:05:27
一键开关机芯片选型指南:功耗、逻辑、封装与供应链四大维度
2026/11/6 1:05:28
FSoE白通道:EtherCAT功能安全通信的信任模型与工程实践
2026/11/6 1:05:28
单片机控制板异常排查六步法:从供电到环境的系统化故障定位指南
2026/11/6 4:33:35
面向复杂光照与角度的宠物面部识别鲁棒性增强策略
2026/11/6 4:33:28
DRV8818PWPR与R7FA8M1AHECBD工业步进驱动实战指南
2026/11/6 4:33:20
STM32与DRV8818双极步进电机驱动方案:从选型到调试全流程解析
2026/11/6 4:33:35
面向复杂光照与角度的宠物面部识别鲁棒性增强策略
2026/11/6 4:33:28
DRV8818PWPR与R7FA8M1AHECBD工业步进驱动实战指南
2026/11/6 4:33:20
STM32与DRV8818双极步进电机驱动方案:从选型到调试全流程解析