简单了解string类的特性及使用(C++)

article/2025/6/27 10:13:19

string的特性

string类不属于STL,它属于标准库

但由于它具有数据结构的特性,所以从归类的角度,可以将string类归类到容器里面去

在C++标准库中,std::string 是一个特化的类型,实际上是 std::basic_string 的别名。std::basic_string 是一个模板类std::basic_string属于C++标准模板库(STL)的一部分),它允许指定字符类型和其他特性(如分配器),而 std::string 则是专门为处理 char 类型字符序列设计的一个具体实例。

所以底层可以认为 string类就是 管理char类型 字符数组的顺序表

(以下图片由cplusplus.com - The C++ Resources Network网站得来)

可以看出不仅有char 字符类型,还有char16_t 等等字符类型,本质上是由于不同编码存在的差异

我们用得最多的是utf-8,它是变长编码,兼容ascll,string就更适用于utf-8

使用string之前,记得要包含<string>头文件

string的构造函数分为7种,赋值重载分为3种

string的构造函数

默认构造函数

  • 语法:string s;

  • 作用:创建一个空字符串。

初始化构造函数

  • 语法:string s("hello");

  • 作用:使用字符串常量初始化字符串对象。

拷贝构造函数

  • 语法:string s1(s2);

  • 作用:使用一个已存在的字符串对象初始化新对象。

指定字符数构造函数

  • 语法:string s(5, 'a');

  • 作用:创建一个包含5个字符'a'的字符串。

子字符串构造函数

其中pos是postition的缩写,意思是 从string类型变量 str 的pos位置 开始的len个字符进行构造

len是半缺省参数,使用npos作为默认值

npos是类里的静态成员变量,定义为-1,指得是整型的最大值(也就意味着如果不给第二个参数,默认取到字符串结尾,因为单个字符串很难达到 -1 这么大的长度)

同时,如果给的长度超过了指定字符串的长度,也默认取到字符串结尾

比如下图中的字符串 c,要取20个字符,就只会输出从下标为2位置开始的后面所有字符

拷贝字符串的前n个

  • 语法:string s("hello", 2);

注意要与 子字符串构造函数 相互区分

迭代器范围构造函数

  • 语法:string s(s2.begin(), s2.end());

  • 作用:使用迭代器范围初始化字符串对象。

string的赋值

分别是string类型的赋值,字符串类型的赋值和字符类型的赋值

string的遍历

1、下标加方括号

分别分为 被const修饰 和没有被const修饰 的方括号操作符

编译器调用时会通过string类型 自动调用最匹配的

2、迭代器

使用string的内置迭代器,也可以进行string的遍历

由于迭代器一般会使用类的形式进行实现,相当于在类里面再定义一个类(嵌套类),所以在外部进行访问迭代器时,需要使用类作用限定符指定所在类(string类的迭代器就在string类)

begin函数 返回的是指向开始位置的迭代器,end是结束位置(有效字符 不包括‘\0’)的下一个位置的迭代器(左闭右开)

由于每个容器底下都有个迭代器类型,因此可以实现与底层结构的解耦,以及与算法的解耦

insert头插

有七种,这里只介绍其中三种

意思就是在pos位置前插入 s 字符串

可以看到字符串“hello”成功的插入到了下标为0的位置 ‘w‘ 前面

接下来就是单个字符插入

分为两种形式

第一种形式没有使用迭代器,意思为,在pos位置前 插入 n个 c字符(这个n在实际使用的时候 很容易忘记,需要注意一下)

第二种与第一种类似,只是pos变成了迭代器形式

第三种:迭代器形式的头插 字符还有一种形式

意思就是在p的位置前插入一个字符 c,不用额外说明字符个数


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

相关文章

【stm32开发板】PCB模块化布局

一、DCDC电路布局规则 通顺 抗干扰 1.通顺 流过大电流的路径尽可能的短 2.抗干扰 可以在反馈线附近加过孔&#xff0c;增强抗干扰能力 二、PCB布局 1、将原理图转到PCB 2.点击应用修改 3.修改规则 将mm改成mil 将安全间距里的填充区域/泪滴的导线间距改为6&#xff0c;还…

【性能调优系列】深入解析火焰图:从基础阅读到性能优化实战

博客目录 一、火焰图基础&#xff1a;结构与阅读方法二、深入分析火焰图&#xff1a;关键观察点与性能瓶颈识别1. 识别最宽的函数块2. HTTP 请求处理分析3. 数据库操作分析4. 业务逻辑分析 三、性能优化实战&#xff1a;从火焰图到解决方案1. 线程池性能优化2. 数据库访问优化3…

AI智能体|扣子(Coze)搭建【合同/文档审查】工作流

你好&#xff0c;我是偶然&#xff01;前段时间工作上发生了重大的调整&#xff0c;导致我停更超一周。 但在这段时间里&#xff0c;我也有了一些自己的职场上的感悟&#xff0c;下面我分享给你&#xff0c;再给你分享今天的智能体。 不要怕任何的人和事&#xff0c;为什么怕&a…

家政维修平台实战12搭建服务详情功能

目录 1 创建页面2 搭建布局2.1 搭建背景容器2.2 添加内容区域2.3 配置服务项目图片2.4 搭建标题和价格2.5 搭建服务详情 最终效果总结 上一篇我们介绍了服务规格的搭建过程&#xff0c;有了后台功能并且维护好数据之后&#xff0c;我们就可以开发服务详情页面了&#xff0c;先看…

回测效率提升500%!khQuant打板策略回测性能深度剖析——基于miniQMT的回测系统深度优化【AI量化第29篇】

我是Mr.看海&#xff0c;我在尝试用信号处理的知识积累和思考方式做量化交易&#xff0c;应用深度学习和AI实现股票自动交易&#xff0c;目的是实现财务自由~ 目前我正在开发基于miniQMT的量化交易系统——看海量化交易系统&#xff08;KhQuant 是其核心框架&#xff09;。 一、…

2025年上半年各地都发布了哪些电竞政策?虎牙Hyper电竞嘉年华引领新趋势

近日,2025虎牙Hyper电竞嘉年华正式宣布将于6月21日至22日在成都欢乐谷主题公园举行。这场盛会融合了电竞、文旅与乡村振兴,由新华社国家重点实验室主办,新华优品作为支持平台。活动不仅将呈现精彩的电竞比赛,还将通过直播展示乡村美景、特色农产品以及村民的热情好客。作为…

黄金直线拉升 国际金价跳空高开

6月2日,受特朗普关税政策影响,国际金价跳空高开,截至发稿前已经超过3340美元。今年以来,国际金价累计上涨约25.5%。截至当天上午10:30,各大银行和品牌金条价格普遍上涨,周生生、中国黄金、水贝等品牌的金条价格都有所上升。其中,周生生的涨幅最大,较前一天上涨了6元/克…

德约科维奇法网100胜 晋级八强续写辉煌

德约科维奇在法网男单1/8决赛中直落三盘击败英国名将诺里,顺利晋级八强。接下来他将与兹维列夫争夺四强席位。此前,德约科维奇五次对阵诺里均取得胜利。比赛中,德约科维奇首盘迅速破发并以6比2赢得第一盘。第二盘,尽管诺里一度领先,但德约科维奇迅速回破并以6比3再下一城。…

【AI+若依框架】基础应用篇

【AI若依框架】基础应用篇 一、若依搭建1、基础2、RuoYi-Vue2.1 后端项目搭建2.2 前端项目搭建 二、入门案例三、功能详解1、权限控制1.1 基础概念1.2 案例操作 2、数据字典2.1 基础知识2.2 案列操作 3、其他功能3.1 参数设置3.2 通知公告3.3 日志管理 4、监控功能4.1 监控相关…

美国2.5亿只蜜蜂出逃密密麻麻 车祸引发蜜蜂大逃亡

美国西北部的华盛顿州发生了一场车祸,导致约2.5亿只蜜蜂飞出。这起事故发生在当地时间5月30日,一辆运送蜜蜂的卡车在靠近加拿大边境的地区行驶时侧翻。霍特科姆县治安官办公室随后通过社交媒体发布消息,提醒公众避开该区域,以防被大量蜜蜂蜇伤。据霍特科姆县应急部门发言人…

意大利埃特纳火山喷发 灰柱高达5千米

当地时间6月2日,意大利西西里岛的埃特纳火山再次喷发,火山灰柱高达至少5千米。尽管如此,位于火山附近的卡塔尼亚机场依然保持运转,未受火山喷发影响。西西里大区政府主席斯基法尼表示,政府民事保护部门正在密切监测火山活动,目前喷发暂时不会对当地居民构成危险。作为欧洲…

天机学堂(初始项目)

资料的网盘链接&#xff1a;https://pan.baidu.com/s/1IyA8mHLhPQv6ibZR4a0DUQ 提取码: xdnb 1.学习背景 各位同学大家好&#xff0c;经过前面的学习我们已经掌握了《微服务架构》的核心技术栈。相信大家也体会到了微服务架构相对于项目一的单体架构要复杂很多&#xff0c;…

TomatoSCI数据分析实战:探索社交媒体成瘾

今天我们尝试对一份社交媒体成瘾的调查数据进行几项简单的分析&#xff0c;看看可以得出哪些有意思的结论&#xff1f;图1A是这份数据的说明&#xff0c;因为篇幅太长只把部分数据贴出来&#xff08;图1B&#xff09;。 01 不同性别的成瘾程度会不同吗&#xff1f; 我们使用bo…

【安全】VulnHub靶场 - W1R3S

【安全】VulnHub靶场 - W1R3S 备注一、故事背景二、Web渗透1.主机发现端口扫描2.ftp服务3.web服务 三、权限提升 备注 2025/05/22 星期四 简单的打靶记录 一、故事背景 您受雇对 W1R3S.inc 个人服务器进行渗透测试并报告所有发现。 他们要求您获得 root 访问权限并找到flag&…

【Java Web】6.登入认证

&#x1f4d8;博客主页&#xff1a;程序员葵安 &#x1faf6;感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb; 文章目录 一、登录功能 1.1 需求 1.2 思路分析 1.3 代码实现 二、登录校验 2.1 问题分析 2.2 会话技术 2.2.1 会话技术介绍 2.2.2 会话…

探秘Transformer系列之(35)--- 大模型量化基础

探秘Transformer系列之&#xff08;35&#xff09;— 大模型量化基础 文章目录 探秘Transformer系列之&#xff08;35&#xff09;--- 大模型量化基础0x00 概述0x01 outlier1.1 定义1.2 特点1.3 出现过程1.4 分布规律1.5 出现原因1.5.1 softmaxLLM模型VIT模型 1.5.2 RoPE现象分…

如何提升大模型召回率和实战案例

导读&#xff1a;在大模型应用开发中&#xff0c;检索系统的召回率和准确率往往成为制约产品效果的关键瓶颈。当用户查询"SSL证书"而文档库中记录的是"TLS证书"时&#xff0c;传统的单一查询检索就会出现语义匹配失效的问题。本文深入剖析MultiQueryRetrie…

GMDCMonitor企业版功能分享0602

企业版包含了拓扑中心、签退中心、知识库、通知渠道配置、平台自定义&#xff0c;这5个功能 1&#xff09;拓扑中心 拓扑中心绘制的时候需要注意2点&#xff1a; 1&#xff09;要先选择 “矩形区域” 或 “圆形区域” 来添加各个背景区域&#xff0c;同时录入区域尺寸&#x…

Higress项目解析(二):Proxy-Wasm Go SDK

3、Proxy-Wasm Go SDK Proxy-Wasm Go SDK 依赖于 tinygo&#xff0c;同时 Proxy - Wasm Go SDK 是基于 Proxy-Wasm ABI 规范使用 Go 编程语言扩展网络代理&#xff08;例如 Envoy&#xff09;的 SDK&#xff0c;而 Proxy-Wasm ABI 定义了网络代理和在网络代理内部运行的 Wasm …

MySQL日志

日志 MySQL中的日志有&#xff1a;错误日志、二进制日志、查询日志、慢查询日志 1&#xff0c;错误日志 2&#xff0c;二进制日志 主从复制就是基于二进制日志 相关的三个参数&#xff1a; log_bin&#xff1a;表示二进制日志启动状态 log_bin_basename&#xff1a;最终生…