当前位置: 首页 > news >正文

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

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,不用额外说明字符个数

相关文章:

  • MDP的curriculums部分
  • volatile,synchronized,原子操作实现原理,缓存一致性协议
  • 基于Python学习《Head First设计模式》第四章 工厂方法+抽象工厂
  • “等待-通知”机制优化(一次性申请)循环等待
  • HarmonyOS5 仓颉入门:和 ArkTs 互操作
  • 初识vue3(vue简介,环境配置,setup语法糖)
  • RGB888色彩格式转RGB565格式
  • VMware安装Ubuntu全攻略
  • 记忆解码 | 从神经机制到记忆逻辑的科学探索
  • Google机器学习实践指南(TensorFlow六大优化器)
  • Python----目标检测(Ultralytics安装和YOLO-V8快速上手)
  • 基于STM32控制直流电机加减速正反转设计
  • 自适应流量调度用于遥操作:面向时间敏感网络的通信与控制协同优化框架
  • OpenRouter使用指南
  • DeepSeek模型高级应用:提示工程与Few-shot学习实战指南
  • Origin将杂乱的分组散点图升级为美观的带颜色映射的气泡图
  • web架构3------(nginx的return跳转,gzip压缩,目录浏览,访问控制和location符号优先级)
  • 配置刷新技术
  • DAY01:【ML 第三弹】基本概念和建模流程
  • JS手写代码篇---手写类型判断函数
  • wordpress 香港主機/seo常用方法
  • 新乡专业做淘宝网站/自建网站平台有哪些
  • 网站建设流程及相应技术/谷歌商店app下载
  • 温州网站建设 seo/冯耀宗seo视频教程
  • 在线爬取网页源码/合肥网站建设优化
  • 郑州交易网站建设/外链工具下载