【C++】string类

article/2025/8/3 16:33:16

1. 标准库中的string类

1.1 string类

string类的文档介绍

使用 string 类时,必须包含 #include 头文件以及 using namespace std ;

1.2 auto和范围for

auto 关键字
在早期C/C++ auto 的含义是:使用 auto 修饰的变量,是具有自动存储器的局部变量,后来这个
不重要了。 C++11 中,标准委员会变废为宝赋予了 auto 全新的含义即: auto 不再是一个存储类型
指示符,而是作为一个新的类型指示符来指示编译器, auto 声明的变量必须由编译器在编译时期
推导而得
auto 声明指针类型时,用 auto auto* 没有任何区别,但用 auto 声明引用类型时则必须加 &
当在同一行声明多个变量时,这些变量必须是相同的类型,否则编译器将会报错,因为编译器实际
只对第一个类型进行推导,然后用推导出来的类型定义其他变量
auto 不能作为函数的参数,可以做返回值,但是建议谨慎使用
// 不能做参数
void func2(auto a)
{}// 可以做返回值,但是建议谨慎使用
auto func3()
{return 3;
}
auto 不能直接用来声明数组
范围for
对于一个 有范围的集合 而言,由程序员来说明循环的范围是多余的,有时候还会容易犯错误。因此
C++11 中引入了基于范围的 for 循环。 for 循环后的括号由冒号 分为两部分:第一部分是范围
内用于迭代的变量,第二部分则表示被迭代的范围 ,自动迭代,自动取数据,自动判断结束。
范围 for 可以作用到数组和容器对象上进行遍历
范围 for 的底层很简单,容器遍历实际就是替换为迭代器,这个从汇编层也可以看到。

2. string类的常用接口说明

2.1 string类对象的常见构造

string() 用于创建一个空字符串的默认构造函数。

string(const char* s) 接受一个指向字符数组的指针作为参数。这个构造函数用于创建一个字符串对象,其内容由给定的字符数组初始化。

string(size_t n, char c) 接受两个参数:一个size_t类型的n和一个char类型的c。这个构造函数用于创建一个字符串对象,其内容由重复的字符c组成,重复次数为n

string(const string& s) 拷贝构造函数

2.2 string类对象的容量操作

1. `size()`: 返回字符串的长度,即字符的数量。

2. `length()`: 与 `size()` 相同,返回字符串的长度。

3. `capacity()`: 返回字符串的容量,即分配给字符串的内存空间大小。

4. `resize(size_t n)`: 调整字符串的大小,使其包含 `n` 个字符。如果 `n` 大于当前长度,则在末尾添加空格;如果 `n` 小于当前长度,则删除多余的字符。

5. `reserve(size_t n)`: 预留至少 `n` 个字符的空间,以便在不重新分配内存的情况下插入更多的字符。

6. empty:这个方法通常用于检查容器是否为空。如果容器为空,返回true;否则返回false。例如,对于std::vector,可以使用empty()方法来检查它是否为空。

7. clear:这个方法用于清空容器中的所有元素。例如,对于std::vector,可以使用clear()方法来删除所有元素,使其大小变为0。

2.3 string类对象的访问及遍历操作

1. **使用下标运算符`[]`访问字符**:通过下标运算符`[]`可以直接访问字符串中的某个字符。下标从0开始,直到`size() - 1`。

	string s1("hello world\n");for (size_t i = 0; i < s1.size(); i++){cout << s1[i] << ' ';}

2. **使用迭代器遍历字符串**:`std::string`类提供了迭代器支持,可以使用迭代器来遍历字符串中的每个字符。

	string s1("hello world\n");string::iterator it = s1.begin();while (it != s1.end()){cout << *it << ' ';it++;}

3. **使用范围for循环遍历字符串**:C++11引入的范围for循环可以更方便地遍历字符串中的每个字符。

	string s1("hello world\n");for (auto ch : s1){cout << ch << ' ';}


http://www.hkcw.cn/article/AJNBsnommJ.shtml

相关文章

Docker 在云环境中的部署:AWS/ECS 与 Azure/AKS 的实践对比

Docker 容器的出现极大地提升了应用程序的打包、交付和运行效率。然而,在面对高并发、高可用和大规模集群管理的生产环境时,将 Docker 容器部署到公有云平台成为了必然选择。公有云平台提供了强大的基础设施和托管服务,极大地简化了底层运维负担。 在众多云服务提供商中,A…

【HarmonyOS 5】Laya游戏如何鸿蒙构建发布详解

【HarmonyOS 5】Laya游戏如何鸿蒙构建发布详解 一、前言 LayaAir引擎是国内最强大的全平台引擎之一&#xff0c;当年H5小游戏火的时候&#xff0c;腾讯入股了腊鸭。我还在游戏公司的时候&#xff0c;17年曾经开发使用腊鸭的H5小游戏&#xff0c;很怀念当年和腊鸭同事一起解决…

理解解释器架构:原理、组成与运行机制全解析

目录 前言1. 什么是解释器架构2. 解释器的基本组成2.1 被解释执行的程序2.2 解释器引擎2.3 解释器内部状态2.4 程序执行的当前状态2.5 存储器模型 3. 解释器的工作原理3.1 解析源代码3.2 初始化运行环境3.3 逐条执行语法结构3.4 维护程序状态3.5 内存管理与变量作用域 4. 举例&…

SOD-123和SOD-123FL封装到底有什么区别?

目录 1. 封装结构与尺寸 2. 热性能 3. 电气特性 4. 应用场景 5. 兼容性与替代性 6.价格比较 大家好&#xff0c;我们硬件工程师经常用到SOD-123和SOD-123FL的封装&#xff0c;特别是二极管&#xff0c;比如二极管1N4007便有这两种封装。那么这两种封装两者到底有什么区别…

Apache IoTDB V2.0.3 发布|新增元数据导入导出脚本适配表模型功能

Release Announcement Version 2.0.3 Apache IoTDB V2.0.3 已经发布&#xff01; V2.0.3 作为树表双模型正式版本&#xff0c;主要新增元数据导入导出脚本适配表模型、Spark 生态集成&#xff08;表模型&#xff09;、AINode 返回结果新增时间戳&#xff0c;表模型新增部分聚…

NX753NX756美光科技闪存NX784NX785

技术解读与产品特性 美光科技的NX系列闪存&#xff0c;包括NX753、NX756、NX784、NX785等型号&#xff0c;代表了当前存储技术的前沿水平。这些产品基于先进的NAND闪存技术&#xff0c;采用业界领先的3D TLC NAND技术&#xff0c;实现了高速的数据读写能力。3D TLC NAND技术通…

go语言的GMP(基础)

1.概念梳理 1.1线程 通常语义中的线程&#xff0c;指的是内核级线程&#xff0c;核心点如下&#xff1a; &#xff08;1&#xff09;是操作系统最小调度单元&#xff1b; &#xff08;2&#xff09;创建、销毁、调度交由内核完成&#xff0c;cpu 需完成用户态与内核态间的切…

Docker容器创建Redis主从集群

利用虚拟机中的三个Docker容器创建主从集群&#xff0c;容器信息&#xff1a; 容器名角色IP映射端口r1master192.168.150.1017001r2slave192.168.150.1017002r3slave192.168.150.1017003 启动多个redis实例 新建一个docker-compose文件来构建主从集群&#xff1a; 文件内容&…

RTMP播放器谁更强?深入解析SmartPlayer与VLC、PotPlayer等方案的技术差异

在视频直播、安防监控、边缘计算、AI视觉识别等场景中&#xff0c;低延迟、高稳定的RTMP播放器SDK 是关键技术模块。虽然市面上存在VLC、PotPlayer等“看起来能播”的播放器&#xff0c;但真正能适用于生产环境&#xff0c;支持工程集成、多平台、复杂网络、实时反馈的专业RTMP…

DelphiXe12创建DataSnap REST Application

服务端&#xff1a;该类型应用可直接部署EXE导云端&#xff0c;指定单页直接写好函数&#xff0c;即可导出。同时自动提供网页版的API文档&#xff0c;并可在线测试写好的接口。也可以向其他语言提供接口。 客户端&#xff1a;可生成调用服务端生成的API接口&#xff0c;无效编…

跨平台猫咪桌宠 BongoCat v0.4.0 绿色版

—————【下 载 地 址】——————— 【​本章下载一】&#xff1a;https://pan.xunlei.com/s/VORWH1a7lPhdwvon6DJgKvrNA1?pwdcw2h# 【​本章下载二】&#xff1a;https://pan.quark.cn/s/c3ac86f4e296 【百款黑科技】&#xff1a;https://ucnygalh6wle.feishu.cn/wiki/…

2023ICPC杭州题解

文章目录 M. V图(签到)J. 神秘树(交互)G. 控制贪吃蛇(最短路)D. 运算符优先级(构造)H. 甜蜜的修噶 II(概率)B. 节日装饰(bitset根号分治)F. Top Cluster(LCA动态维护树的直径) 题目链接 M. V图(签到) int cmp(int x1,int y1,int x2,int y2){int xx1*y2,yx2*y1;if(x>y)return…

图文详解Java并发面试题

文章目录 1、并发与并行2、线程安全3、线程、进程、协程4、线程间通信5、线程创建方式6、8G内存创建的线程数7、普通Java程序含有的线程8、start()、run()9、线程调度、6种状态、强制停止线程、上下文切换10、守护线程、用户线程11、 volatile 、synchronized12、sleep() 、 wa…

文档核心结构优化(程序C++...)

文档核心结构优化 一、文档核心结构优化二、C关键特性详解框架2.1 从C到C的范式迁移 三、深度代码解析模板3.1 现代C特性分层解析 四、C vs C 关键差异矩阵五、交互式文档设计策略5.1 三维学习路径5.2 代码缺陷互动区 六、现代C特性演进图七、性能优化可视化呈现&#xff08;深…

Python打卡训练营Day42

DAY 42 Grad-CAM与Hook函数 知识点回顾 回调函数lambda函数hook函数的模块钩子和张量钩子Grad-CAM的示例 作业&#xff1a;理解下今天的代码即可 import torch import torch.nn as nn import torch.nn.functional as F import torchvision import torchvision.transforms as tr…

Redis 架构设计

找实习中。。。学项目学到redis&#xff0c;又偶然看了个拓展的。是得物的Redis设计&#xff0c;拿出来分享了。 文章地址&#xff0c;https://mp.weixin.qq.com/s/dnlxCXgAxHsfyVNYTDsewA 话说&#xff0c;架构师就是干这种工作的吗&#xff1f; 插曲 才知道这么念&#xff…

振动力学:无阻尼单自由度系统

单自由度振动系统是最简单的一类振动系统,仅用一个坐标就可描述。从力学角度分析,一个实际的振动系统可由三个元件组成:惯性质量、弹性、阻尼,,它们分别描述系统的惯性、弹性、能耗机制。惯性元件是运动的实体,弹性元件提供振动回复力,阻尼元件在振动过程中消耗或吸收外界…

LangChain-结合智谱AI大模型实现自定义tools应用实例

准备: 1.可供调用的实时查询天气的接口: 百度天气接口:https://lbsyun.baidu.com/faq/api?title=webapi/weather/base(没有可以去注册用户实名认证后即可免费使用) 可以使用接口工具ApiPost调用,验证接口是否正常 2.一个csv文件,文件内容中包含各个省市区的行政编码 …

DAY 34 超大力王爱学Python

CPU性能的查看&#xff1a;看架构代际、核心数、线程数GPU性能的查看&#xff1a;看显存、看级别、看架构代际GPU训练的方法&#xff1a;数据和模型移动到GPU device上类的call方法&#xff1a;为什么定义前向传播时可以直接写作self.fc1(x) ps&#xff1a;在训练过程中可以在命…

BLIP-2

目录 摘要 Abstract BLIP-2 模型框架 预训练策略 模型优势 应用场景 实验 代码 总结 摘要 BLIP-2 是一种基于冻结的图像编码器和大型语言模型的高效视觉语言预训练模型&#xff0c;由 Salesforce 研究团队提出。它在 BLIP 的基础上进一步优化&#xff0c;通过轻量级…