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的一种轻量级渲染管线,专注于提供高性能和可移植性。 对惹…...
风管阻力计算
风管阻力主要包括摩擦阻力和局部阻力两大类。摩擦阻力:空气在风管内流动时,与管壁的摩擦作用导致的能量损失,与管道长度、断面尺寸、风速、空气密度等参数有关。局部阻力:风管系统中的弯头、三通、变径、阀门等部件,由于改变了气流的流动方向或速度,导致的额外能量损失,用局部阻…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...
3403. 从盒子中找出字典序最大的字符串 I
3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...
浅谈不同二分算法的查找情况
二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况…...
视觉slam十四讲实践部分记录——ch2、ch3
ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...
云原生安全实战:API网关Kong的鉴权与限流详解
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关(API Gateway) API网关是微服务架构中的核心组件,负责统一管理所有API的流量入口。它像一座…...
2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)
安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...
java高级——高阶函数、如何定义一个函数式接口类似stream流的filter
java高级——高阶函数、stream流 前情提要文章介绍一、函数伊始1.1 合格的函数1.2 有形的函数2. 函数对象2.1 函数对象——行为参数化2.2 函数对象——延迟执行 二、 函数编程语法1. 函数对象表现形式1.1 Lambda表达式1.2 方法引用(Math::max) 2 函数接口…...
密码学基础——SM4算法
博客主页:christine-rr-CSDN博客 专栏主页:密码学 📌 【今日更新】📌 对称密码算法——SM4 目录 一、国密SM系列算法概述 二、SM4算法 2.1算法背景 2.2算法特点 2.3 基本部件 2.3.1 S盒 2.3.2 非线性变换 编辑…...
PH热榜 | 2025-06-08
1. Thiings 标语:一套超过1900个免费AI生成的3D图标集合 介绍:Thiings是一个不断扩展的免费AI生成3D图标库,目前已有超过1900个图标。你可以按照主题浏览,生成自己的图标,或者下载整个图标集。所有图标都可以在个人或…...
