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的一种轻量级渲染管线,专注于提供高性能和可移植性。 对惹…...
风管阻力计算
风管阻力主要包括摩擦阻力和局部阻力两大类。摩擦阻力:空气在风管内流动时,与管壁的摩擦作用导致的能量损失,与管道长度、断面尺寸、风速、空气密度等参数有关。局部阻力:风管系统中的弯头、三通、变径、阀门等部件,由于改变了气流的流动方向或速度,导致的额外能量损失,用局部阻…...

Unity3D中Gfx.WaitForPresent优化方案
前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...

【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...

HBuilderX安装(uni-app和小程序开发)
下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...

EtherNet/IP转DeviceNet协议网关详解
一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…...

微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...
css3笔记 (1) 自用
outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size:0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格ÿ…...

tree 树组件大数据卡顿问题优化
问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...

ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...