C++ -string -常见用法2
博客主页:【夜泉_ly】
本文专栏:【C++】
欢迎点赞👍收藏⭐关注❤️

文章目录
- 💡前言
- 💡访问及遍历
- 1.速览
- 2.operator[] -重点⭐
- 2.1函数原型
- 2.2用法
- 2.3与at
- 3.迭代器
- 3.1函数原型
- 3.2用法速览
- 3.3简介
- 4.范围for
- 4.1用法速览
- 4.2简介
- 5.访问首尾元素
- 5.1函数原型
- 5.2用法速览
💡前言
在这篇文章中,我将继续简单探讨 C++ 中 string 的基本用法。写这篇文章的主要目的是帮助我巩固所学的知识,同时也便于未来的复习和参考。
如果你想大致的了解string的基本用法,也可以留下来看看。
对于那些希望深入学习更多细节的读者,可以去看看这个网站:cplusplus.com,以获取更全面的参考资料。
💡访问及遍历
1.速览
int main()
{string str("Hello World");//最简单的遍历方式就是operator<<cout << str << endl;//用下标遍历:for(size_t i = 0; i < str.size(); i++){cout << str[i];}cout << endl;//用迭代器遍历:string::iterator i = str.begin();while(i != str.end()){cout << *i++;}cout << endl;//用范围for遍历:for(auto e : str){cout << e;}cout << endl;//访问首尾元素:cout << str.front() << " " << str.back() << endl;return 0;
}
Output:
Hello World
Hello World
Hello World
Hello World
H d
2.operator[] -重点⭐
2.1函数原型
char& operator[] (size_t pos);
const char& operator[] (size_t pos) const;
2.2用法
和数组的用法是一样的。
2.3与at
at也是string类中提供的函数,其函数原型:
char& at (size_t pos);
const char& at (size_t pos) const;
如果正常使用,[]与at是一致的,一般不用at,用[]。
如果乱传pos,[]与at有些许不同:
-
当
pos不符合[]和at的规范,[]会断言报错,at会抛异常:string str("Hello World"); str[666];
try {str.at(666); } catch (const std::exception& e) {cout << e.what() << endl; }
-
对于
[]:pos传0 ~ size-1没有问题。- 如果是常对象,
pos传size没有问题。 - 其他情况,都是未定义行为。

-
对于
at:pos只能传0 ~ size-1- 其他情况,会抛出异常。

3.迭代器
3.1函数原型
begin:
iterator begin();
const_iterator begin() const;
end:
iterator end();
const_iterator end() const;
rbegin:
reverse_iterator rbegin();
const_reverse_iterator rbegin() const;
rend:
reverse_iterator rend();
const_reverse_iterator rend() const;
cbegin、cend、crbegin、crend:
const_iterator cbegin() const noexcept;
const_iterator cend() const noexcept;
const_reverse_iterator crbegin() const noexcept;
const_reverse_iterator crend() const noexcept;
3.2用法速览
begin、end、rbegin、rend:
int main()
{string str(6, 0);//正向遍历并修改:string::iterator it = str.begin();for (char i = '0'; it != str.end(); i++, it++){*it = i;}cout << "str: " << str << endl;//反向遍历并打印:string::reverse_iterator rit = str.rbegin();while (rit != str.rend()){cout << *rit;rit++;} cout << endl;return 0;
}
Output:
str: 012345
543210
与begin、end、rbegin、rend不同,
cbegin、cend、crbegin、crend只能针对const修饰的string类对象,一般不用这几个。
3.3简介
迭代器是像指针一样的类型,有可能是指针,有可能不是指针。
一般用于对应STL中各种函数的接口,其作用也类似于指针。
在string中,一般不会手动控制迭代器,推荐使用[]。
正向迭代:
begin指向首元素,end指向末尾元素后一个位置,加加迭代器使其正向移动一步。
反向迭代:
rbegin指向末尾元素,rend指向首元素前一个位置,加加迭代器使其反向移动一步。
注意:
这里都是开区间:[begin,end)、 [rbegin,rend)
例如:
void Test()
{string str("B 6 6 6 E");string::iterator it_B = str.begin();string::iterator it_E = str.end();string::reverse_iterator rit_B = str.rbegin();string::reverse_iterator rit_E = str.rend();cout << "*(it_B):" << *it_B << " *(it_E - 1):" << *(it_E - 1) << endl;cout << "*(rit_B):" << *rit_B << " *(rit_E - 1):" << *(rit_E - 1) << endl;
}
Output:
*(it_B):B *(it_E - 1):E
*(rit_B):E *(rit_E - 1):B
另外,迭代器中加了assert断言,因此只要位置不合理都会直接报错,比如尝试让上面代码中的it_B--;:

或者让it_E++:

4.范围for
只要支持迭代器,就支持范围for!!!
4.1用法速览
void Test()
{string str("Hello World");for (char c : str)cout << c;cout << endl;for (char c : str.rbegin())cout << c;
}
Output:
Hello World
4.2简介
范围for是C++给出的一颗语法糖,使用极其便利。
在上面我标了一句话:只要支持迭代器,就支持范围for!!!
因为范围for是基于迭代器实现的。
void Test()
{string str("Hello World");for (auto it = str.begin(); it != str.end(); it++)cout << *it;for (char c : str)cout << c;
}


5.访问首尾元素
5.1函数原型
char& back();
const char& back() const;char& front();
const char& front() const;
5.2用法速览
只能提供首尾元素,用的不多。
void Test()
{string str("6 6 6 6 6");str.front() = 'F';str.back() = 'B';cout << "Front:" << str.front() << endl;cout << "Back:" << str.back() << endl;
}
Output:
Front:F
Back:B
需注意,如果为空串,会导致未定义行为。

希望本篇文章对你有所帮助!并激发你进一步探索编程的兴趣!
本人仅是个C语言初学者,如果你有任何疑问或建议,欢迎随时留言讨论!让我们一起学习,共同进步!
相关文章:
C++ -string -常见用法2
博客主页:【夜泉_ly】 本文专栏:【C】 欢迎点赞👍收藏⭐关注❤️ 文章目录 💡前言💡访问及遍历1.速览2.operator[] -重点⭐2.1函数原型2.2用法2.3与at 3.迭代器3.1函数原型3.2用法速览3.3简介 4.范围for4.1用法速览4.2…...
为您的 WordPress 网站打造完美广告布局 A5广告单元格插件
一个为 WordPress 网站量身定制的强大工具,它将彻底改变您展示广告的方式 灵活多变的布局设计 A5 广告单元格插件的核心优势在于其无与伦比的灵活性。无论您是想要创建整齐的网格布局,还是希望打造独特的不规则设计,这款插件都能满足您的需求。 自定义网格数量:从 2…...
前端的AI工具:ChatGPT Canvas与Claude Artifacts对比 -仅仅是OpenAI一个迟来的追赶吗?- 贺星舰五飞试验成功
如果你对OpenAI的ChatGPT Canvas和Anthropic的Claude Artifacts有所耳闻,可能会想知道这两个工具有何不同,以及哪个能让你的工作流程更加顺畅。这两个工具旨在提升生产力,但侧重点各异——编码、写作、创意和实时反馈。 本文将深入探讨ChatG…...
GNU链接器(LD):输出分区类型(NOLOAD、READONLY、DSECT、COPY、INFO、OVERLAY)介绍
0 参考资料 GNU-LD-v2.30-中文手册.pdf GNU linker.pdf1 前言 一个完整的编译工具链应该包含以下4个部分: (1)编译器 (2)汇编器 (3)链接器 (4)lib库 在GNU工具链中&…...
【MySQL】表的查询操作——SELECT
目录 1.select的基本使用 1.1.查询所有列 1.2.查询特定列 1.3.DISTINCT关键字的使用——查询不重复的年级 1.4.带条件的查询 1.5.排序查询结果 1.6.LIMIT的使用——限制返回的行数 1.7.组合使用 WHERE、ORDER BY 和 LIMIT 1.8.查询字段为表达式 1.9.为查询结果指定别名…...
天地伟业NVR管理工具EasyNVR平台多个NVR同时管理运行后日志一直在打印error
视频安防监控平台天地伟业NVR管理工具EasyNVR可支持设备通过RTSP/Onvif协议接入,并能对接入的视频流进行处理与多端分发,包括RTMP、RTSP、WS-FLV、HTTP-FLV、WebRTC、HLS等多种视频流格式。平台可提供视频实时监控直播、云端录像、录像检索、云存储与回看…...
HAL+M4学习记录_7
一、TIM 记录学习HAL配置TIM定时器 1.1 简介 TIM(timer)定时器,16位或32位(TIM2和TIM5)计数器、预分频器(16位)、自动重装寄存器的时基单元;可对输入时钟进行计数,在计数…...
mysql 慢查询日志slowlog
慢查询参数 slow log 输出示例 # Time: 2024-08-08T22:39:12.80425308:00 #查询结束时间戳 # UserHost: root[root] localhost [] Id: 83 # Query_time: 2.331306 Lock_time: 0.000003 Rows_sent: 9762500 Rows_examined: 6250 SET timestamp1723127950; select *…...
基于AES的遥感图像加密算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1 AES 加密算法概述 4.2 基于 AES 的遥感图像加密算法原理 5.完整程序 1.程序功能描述 通过AES算法对遥感图像进行加密和解密,分析加解密处理后图像的直方图,相关…...
MySQL insert 记录后查询是乱码问题分析
问题现象 后台应用程序使用的是云上的 MySQL 服务,需要给 MySQL 数据表里 insert 一些数据,平时都是先运行一个 MySQL 的 pod: kubectl run mysql-client --rm -it --restartNever --image mysql:5.7 --command -- env LANGC.UTF-8 mysql -…...
字符串算法之AC 自动机(Aho-Corasick Algorithm, 多模式匹配)详细解读
AC自动机(Aho-Corasick Algorithm)是一种高效的多模式字符串匹配算法,用于同时查找多个模式串(子串)在文本串中的出现位置。它结合了字典树(Trie)和有限状态机(Finite State Machine…...
YoloV10改进:Block改进|使用ContextAggregation模块改善C2f模块|即插即用
摘要 在计算机视觉领域,目标检测与实例分割任务一直是研究的热点。YoloV10作为目标检测领域的佼佼者,凭借其出色的性能和效率赢得了广泛的认可。然而,随着技术的不断进步,如何进一步提升YoloV10的性能成为了我们追求的目标。近期…...
学习之高阶编程str方法
__str__方法 问题思考:交互环境下print打印的内容和和直接输入变量,返回的内容不一样这是为什么?. 使用print打印的时候触发的是_str_方法, 注意点: 重写str,必须要记得写return. return返回的必须是一个字符串对象。 class MyClass:def _…...
FreeRTOS:事件标志组
目录 一、简介 二、 事件控制块 三、相关API 四、 应用场景 一、简介 在FreeRTOS中,使用信号量可以实现同步,但是使用信号量来同步的话任务只能与单个的任务进行同步。有时候某个任务可能会需要与多个任务进行同步,此时信号量就无能为力。…...
【高分论文密码】AI赋能大尺度空间模拟与不确定性分析及数字制图
随着AI大语言模型的广泛应用,大尺度空间模拟预测与数字制图技术在不确定性分析中的重要性日益凸显。这些技术已经成为撰写高分SCI论文的关键工具,被誉为“高分论文密码”。大尺度模拟技术能够从不同的时空尺度揭示农业生态环境领域的内在机理和时空变化规…...
智能摆件(墨水屏)
因为需要申请8k的堆,所以需要更改堆的大小 stm32修改堆栈大小(堆栈空间不足导致死机)_minimum heap size-CSDN博客...
ansible————playbook
一、playbook和ad hoc命令 ad hoc命令是单行,一个简单的任务,运行一次。ansible真正强大的地方是使用ansible的playbook重复运行多次复杂的任务。 一个play是是一组有序的任务,该paly对应着在inventory被选择的主机。一个playbook是一个包含…...
linux日志分割工具logorate快速验证配置是否有效
创建一些文件, 并修改文件的mtime(修改时间) # /var/log/test/*.log touch -d "2024-10-14" test1.log touch -d "2024-10-15" test2.log touch -d "2024-10-16" test3.log touch -d "2024-10-17" test4.log#快速创建一个1G的大文…...
Unity3D URP画面品质的上限如何详解
Unity3D是一款广泛应用于游戏开发的引擎,它提供了多种渲染管线用于实现不同的画面品质。其中一种渲染管线是Universal Render Pipeline(简称URP),它是Unity3D的一种轻量级渲染管线,专注于提供高性能和可移植性。 对惹…...
风管阻力计算
风管阻力主要包括摩擦阻力和局部阻力两大类。摩擦阻力:空气在风管内流动时,与管壁的摩擦作用导致的能量损失,与管道长度、断面尺寸、风速、空气密度等参数有关。局部阻力:风管系统中的弯头、三通、变径、阀门等部件,由于改变了气流的流动方向或速度,导致的额外能量损失,用局部阻…...
s2-pro效果展示:高语速新闻播报(220字/分钟)清晰度实测
s2-pro效果展示:高语速新闻播报(220字/分钟)清晰度实测 1. 专业语音合成新标杆 s2-pro作为Fish Audio开源的专业级语音合成模型镜像,正在重新定义文本转语音的技术标准。不同于常见的聊天式语音工具,s2-pro专注于提供…...
避坑指南:StarRocks聚合模型排序键的5个常见错误配置(含性能对比测试)
StarRocks聚合模型排序键配置实战:从性能陷阱到最佳实践 当电商平台的UV统计查询从3秒延长到30秒,当数据仓库的存储空间以每天10%的速度膨胀,很多团队才意识到——聚合模型的排序键配置出了问题。作为StarRocks最核心的性能杠杆,排…...
PROJECT MOGFACE在复杂网络分析中的应用:图数据建模与推理
PROJECT MOGFACE在复杂网络分析中的应用:图数据建模与推理 最近在分析一个社交网络项目时,我遇到了一个挺头疼的问题:面对几万个用户节点和错综复杂的关注关系,传统的分析方法要么计算量巨大,要么难以挖掘出深层的模式…...
Qt 串口编程实战:keySight 34401A 万用表数据采集与存储
1. 项目背景与硬件准备 keySight 34401A 数字万用表是实验室常见的六位半高精度测量设备,支持GPIB和RS-232两种通信接口。在实际工业测量场景中,RS-232串口连接因其布线简单、成本低廉的特点,成为许多开发者的首选方案。我最近接手的一个电池…...
零基础入门:PyTorch-2.x-Universal-Dev-v1.0环境使用避坑指南
零基础入门:PyTorch-2.x-Universal-Dev-v1.0环境使用避坑指南 1. 环境介绍与快速验证 PyTorch-2.x-Universal-Dev-v1.0是一个专为深度学习开发者设计的预配置环境,基于官方PyTorch底包构建,已经集成了常用的数据处理、可视化和开发工具。这…...
5大实战技巧让你精通FDS火灾动力学模拟技术
5大实战技巧让你精通FDS火灾动力学模拟技术 【免费下载链接】fds Fire Dynamics Simulator 项目地址: https://gitcode.com/gh_mirrors/fd/fds 当一场突如其来的火灾发生时,传统的消防设计往往只能依靠经验估算,而FDS(Fire Dynamics S…...
倒立摆背后的控制哲学:为什么LQR能稳住这根‘杆’?用日常现象解析最优控制
倒立摆背后的控制哲学:为什么LQR能稳住这根‘杆’?用日常现象解析最优控制 想象一下骑自行车时微调把手保持平衡的瞬间,或是用手指顶住铅笔不让它倒下的场景。这些看似简单的动作背后,隐藏着与火箭姿态控制、机器人行走相同的数学…...
3个方法解决小说断更难题:Yuedu书源库让你实现阅读自由
3个方法解决小说断更难题:Yuedu书源库让你实现阅读自由 【免费下载链接】Yuedu 📚「阅读」APP 精品书源(网络小说) 项目地址: https://gitcode.com/gh_mirrors/yu/Yuedu 你是否经历过这样的时刻:深夜追更的小说…...
NVIDIA Profile Inspector显卡性能调优实战指南:从问题诊断到专业配置
NVIDIA Profile Inspector显卡性能调优实战指南:从问题诊断到专业配置 【免费下载链接】nvidiaProfileInspector 项目地址: https://gitcode.com/gh_mirrors/nv/nvidiaProfileInspector 一、显卡性能异常定位:精准找到游戏卡顿根源 游戏性能问题…...
使用FFmpeg高效实现MKV多语言字幕动态切换方案
1. MKV字幕基础与FFmpeg核心能力解析 第一次接触MKV视频封装格式时,我被它的灵活性惊艳到了。这种被称为Matroska的容器格式,就像瑞士军刀一样能同时容纳视频、音频、字幕等多种轨道。特别是对多语言字幕的支持,让它成为国际版视频分发的首选…...
