C++中的string的介绍(从string到STL)

C++中的string的介绍

文章目录

  • C++中的string的介绍
    • 1. 从string到STL
    • 2. string 的构造函数
    • 3. string 的iterator(迭代器)
    • 4. string 中的元素访问
    • 5. string 中容量相关
    • 6. string 中的插入删除
    • 7. string 中的查找
    • 8. string 的剩余函数

1. 从string到STL

  严格来说string不是Containers 容器,也就不属于STL C++ 标准模板库,因为string是早于STL的,所以没有作业可以抄,导致string中有很多,约100多个,有很多功能是相似的,所以只介绍一些常用的函数,虽然Containers 容器 中有很多不同类模板,但函数命名以及函数的形参是类似的,读懂一个类模板就基本明白了

string本质上就是一个存储char类型的顺序表
类似:

  • char* _ptr
  • size_t _size
  • size_t _capacity

2. string 的构造函数

在这里插入图片描述

  • (1) string的默认构造(用户不写由编译器自动生成的),生成空字符串
    string s;

  • (2)string的拷贝构造,用另一个string拷贝构造
    string s1(s2);

  • (3) 用string pos位置开始,向后 len个长度的部分,拷贝构造string
    pos为缺省参数,不写则为 0
    len为缺省参数,不写则为nposstring的成员常量,为size_t npos = -1,也就是整型的最大值
    string s1(s2,0,10);

  • (4) 用一个字符串构造
    string s("hello world");

  • (5) 用一个字符串的前N个构造
    string s("hello world",5);

  • (6) 用N个c构造
    string s(5,'x');

  • (7) 用迭代区间构造(下面会提到)

3. string 的iterator(迭代器)

在这里插入图片描述
  迭代器是C++标准模板库(STL)中的一个核心概念,用来遍历容器中的元素,类似于指针,可以说指针是一种迭代器,但不能说迭代器是指针,因为你不知道迭代器的底层是什么

VS2022 x86下的迭代器类型
在这里插入图片描述

  • begin 返回指向第一个元素的迭代器,提供了const和非const两个版本(其他的也一样)
    在这里插入图片描述

  • end返回指向最后一个元素的下一个位置的迭代器

  • rbegin是逆序迭代器,返回指向最后一个元素的下一个位置

  • end返回指向第一个元素的迭代器

4. string 中的元素访问

在这里插入图片描述

  • operator[]是通过像数组一样,用下标的方式来访问
    s[5];
  • at类似于operator[],只不过at会进行边界的强制检查,越界则会抛出异常,而operator[]不会对边界进行检查
    s.at(5);
  • backfront返回最后/第一个元素的引用
    s.back() / s.front();

遍历string的三种方法

    1. operator[] 通过下标来访问数据
string s("hello wolrd");
for (int i = 0; i < s.size(); ++i)\
{cout << s[i] << " ";
}
cout << endl;
    1. iterator 通过迭代器来访问 迭代器需配对使用,正序对正序,逆序对逆序
string s("hello wolrd");
//正序打印
string::iterator it = s.begin();
while (it != s.end())
{cout << *it << " ";++it;
}
cout << endl;
//逆序打印
string::reverse_iterator it = s.rbegin();
while (it != s.rend())
{cout << *it << " ";++it;
}
cout << endl;
//const的string打印
const string s("hello wolrd");
string::const_iterator it = s.begin();
while (it != s.end())
{cout << *it << " ";++it;
}
cout << endl;
    1. 范围for 通过自动判断开始和结束,以及自动++
	string s("hello wolrd");for (auto ch : s){cout << ch << " ";}cout << endl;

5. string 中容量相关

在这里插入图片描述

  • size length 返回string的字符个数,length 是只针对string ,而size 是所有容器都有的成员函数

  • max_size 返回最大能容纳的长度

  • capacity 返回string 的容量

  • clear 清空string

  • empty 判断string是否为空

  • shrink_to_fitstring缩小至合适的容量,避免空间浪费

  • resize 调整string 的大小,会删除多余的元素

  • reserve 调整string 的容量,一般情况下,如果调整的容量要小于原本的容量,编译器不会进行缩容的

	string str("Hello World.");str.reserve(111);//扩容至111str.resize(5);  //调整元素个数为5,删除多余元素str.reserve(50); //不改变大小

6. string 中的插入删除

在这里插入图片描述

  • operator+= 在结尾添加一个string/一个字符串/一个字符
    在这里插入图片描述

  • append 在结尾追加一个string/string的一部分/一个C字符串/一个C字符串的前N个/N个c字符/一个迭代区间
    在这里插入图片描述

  • push_back 尾插一个字符

  • insertpos位置开始插入一个string/从pos位置开始插入一个string的一部分/从pos位置开始插入一个C字符串/从pos位置开始插入一个C字符串的前N个/从pos位置开始插入N个c字符/从迭代器位置开始插入N个c字符/从迭代器位置开始插入一个字符/从迭代器位置开始插入一段迭代区间
    在这里插入图片描述

  • assign用一个string的值修改原string/用string的一部分来修改原string/用一个C字符串来修改原string/用一个C字符串的前N个来修改原string/用N个c字符来修改原string/用一个迭代区间的值来修改原string
    在这里插入图片描述

  • erase默认全删除(或者传一段范围,如果len大于pos之后的长度则删除pos之后的全部字符)/删除一个迭代器指向的字符/删除一段迭代区间的字符
    在这里插入图片描述

  • swap 交换两个string

  • pop_back尾删一个字符operator+=

可以看到在string中有许多重复功能的函数,例如push_back appendoperator+=,都使用operator+=来尾插字符不是更好嘛,所以string在设计上有很多重复的地方,只需要了解常见的函数即可

7. string 中的查找

在这里插入图片描述

  • c_str 返回字符串首元素的地址

  • find 查找第一个符合要求下标
    str.find("hello")//找到单词hello

  • rfind 逆序查找第一个符合要求下标

  • find_first_of find_last_of查找任意一个符合要求的下标(可以有多个要求)
    str.find_first_of("aeiou")//找到a e i o u任意一个第一次出现的下标

  • find_first_of find_last_of查找任意一个不符合要求的下标

  • substr 生成子串(从pos向后len个字符,并返回这部分string

8. string 的剩余函数

在这里插入图片描述

  • operator>> operator<< 允许string像内置类型一样输入输出

在这里插入图片描述

  • operator=string的赋值重载,类似与assign的功能,将新的值赋值给string

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/393857.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【轻松拿捏】Java是如何实现跨平台性的?

Java是如何实现跨平台性的&#xff1f; 一、Java 的跨平台性主要通过以下几个核心机制实现&#xff1a; 二、具体实现 三、示例 四、JVM 工作示意图 五、总结 &#x1f388;边走、边悟&#x1f388;迟早会好 一、Java 的跨平台性主要通过以下几个核心机制实现&#xff…

CICD流水线

一、CICD流水线简介 CICD概念 CI/CD流水线是现代软件开发的一个核心概念&#xff0c;它涉及自动化和管理软件从开发到部署的整个生命周期 概念定义 具体有三点&#xff1a;持续集成、持续交付、持续部署 流水线组成为&#xff1a;代码提交、测试、构建、部署、结果通知 二…

PHP最新可用获取QQ昵称API接口源码_非第三方

PHP最新可用获取QQ昵称API接口源码&#xff0c;运行环境为php7-8都可以&#xff0c;内容为直接调用QQ空间接口 在需要展示QQ昵称处&#xff0c;直接调用以下函数就可以。 例如&#xff1a;get_qq_nick(123456)就会直接输出123456的qq号昵称。 API源码下载&#xff1a;QQ昵称AP…

第R2周:LSTM-火灾温度预测:一文搞懂LSTM(长短期记忆网络)

一文搞懂LSTM&#xff08;长短期记忆网络&#xff09; 一句话介绍LSTM&#xff0c;它是RNN的进阶版&#xff0c;如果说RNN的最大限度是理解一句话&#xff0c;那么LSTM的最大限度则是理解一段话&#xff0c;详细介绍如下&#xff1a; LSTM&#xff0c;全称为长短期记忆网络(Lo…

python-鼠标绘画线条程序

闲来无聊简单编写了一个绘图小程序。 主要思路 主要是基于Python中的内置模块turtle编写的&#xff0c;简单扩展了一下&#xff0c;通过绑定事件能够达到鼠标绘制、删除、存储已经绘制图案的线条这几个功能。 路径结构 -draw- define.py- main.py- myturtle.py使用 点住鼠…

Element学习(入门)(1)

1、Element官网&#xff1a;https://element.eleme.cn/#/zh-CN 2、来源与用处 3、Element的快速入门 &#xff08;1&#xff09; &#xff08;2&#xff09;在入口文件&#xff08;main.js&#xff09;中引入 &#xff08;3&#xff09; 4、快捷键ctrlc&#xff0c;在当前的项目…

zsh 配置 docker 自动补全

zsh 配置 docker 自动补全 在终端中使用 docker 的命令的时候必须要全部手敲&#xff0c;没有提示&#xff0c;于是就在找是否有自动补全的脚本&#xff0c;搜索了一圈踩了一些坑总结了一下具体的步骤。 首先执行如下命令&#xff1a; mkdir -p ~/.zsh/completion curl -L h…

JavaEE: 查看线程信息

示例用代码 public class Main {static class MyThread extends Thread {Overridepublic void run() {while (true) {System.out.println("hello thread");try {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}}}}public st…

Python 用户输入和while循环

1、input()函数的工作原理&#xff08;用户输入&#xff09; input()函数让程序暂停运行&#xff0c;等待用户输入一些文本。获取用户输入后&#xff0c;Python将其赋给变量&#xff0c;以其使用。 在input()函数接受一个参数&#xff0c;既要向用户显示的提示&#xff0c;为了…

Linux 利用 ftrace 分析内核调用

目录 一、概述二、ftrace 的使用1、常用信息2、指定 ftrace 跟踪器3、设置要跟踪的函数4、ftrace 的开关5、function 跟踪程序6、function_graph 跟踪程序7、函数过滤器8、跟踪事件 三、trace-cmd 的使用1、常见命令2、常用选项2.1 列出可用的追踪器2.2 跟踪特定进程的函数调用…

计算机毕业设计选题推荐-课程教学平台-Java/Python项目实战

✨作者主页&#xff1a;IT毕设梦工厂✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

ceph

ceph是一个开源的&#xff0c;用c语言编写的分布式的存储系统。存储文件数据。 /dev/sdb fdisk /dev/sdb gdisk /dev/sdb lvm 逻辑卷 可以扩容 raid 磁盘 高可用 基于物理意义上的单机的存储系统。 分布式由多台物理磁盘组成一个集群&#xff0c;在这个基础之上实现高可…

激光导航AGV叉车那么多,究竟该怎么选?一篇文章讲明白~

AGV叉车 随着经济的快速发展&#xff0c;大部分企业的物料搬运开始脱离人工劳作&#xff0c;取而代之的是以叉车为主的机械化搬运。AGV叉车是工业搬运车辆&#xff0c;是指对成件托盘货物进行装卸、堆垛和短距离运输作业的各种轮式搬运车辆&#xff0c;主要应用于货场、工厂车间…

HslCommunicationDemo各品牌Plc通信测试软件工具

目录 1、HslCommunicationDemo程序包 2、ModbusTCP举例说明 (0)概述 &#xff08;1&#xff09;线圈写操作 &#xff08;2&#xff09;寄存器写操作 3、C#工程中DLL库文件使用 &#xff08;1&#xff09;创建Winform程序工程 &#xff08;2&#xff09;写寄存器 1、HslC…

基于内地城市生活垃圾收运场景的路线规划算法

基于混合遗传算法和模拟退火算法的优化垃圾收集路线规划 摘要 本文提出了一种基于混合遗传算法&#xff08;GA&#xff09;和模拟退火算法&#xff08;SA&#xff09;的创新路线规划方法&#xff0c;旨在优化内地城市的生活垃圾收集效率。算法结合了遗传算法的全局搜索能力和…

MySQL第1讲--详细安装教程和启动方法

文章目录 安装教程打开或关闭方式方式1&#xff1a;方式2&#xff1a; 客户端连接方式客户端连接方式1&#xff1a;客户端连接方式2&#xff1a;MySQL环境变量的配置 安装教程 1、mysql官网下载最新的符合本系统的版本 2、点击.msi文件进入安装页面 选择默认的选项开发者安…

15.DMDIS 工具优化

文章目录 前言一、安装部署安装数据源转换作业监控 二、性能优化问题 1 &#xff1a;DMETL 卡顿问题问题 2 &#xff1a;DM -> HIVE 的迁移速度慢问题 3 &#xff1a;ORACLE -> DM 的迁移速度慢问题 4 &#xff1a;GP -> DM 的迁移速度慢问题 5 &#xff1a;DM -> …

[ERR] 1273 - Unknown collation: ‘utf8mb4_0900_ai_ci‘(已解决)

今天在使用navicate Premium运行sql文件时出现如下错误&#xff1a; 错误&#xff1a;1273 - Unknown collation: utf8mb4_0900_ai_ci 报错原因&#xff1a; 生成转储文件&#xff08;也就是sql文件&#xff09;的数据库版本为8.0,而要运行sql文件的数据库版本为5.6,因为是高版…

Android进阶之路 - 字体加粗,定制化字体粗度

在客户端中不论是PC端&#xff0c;还是移动端主要价值之一就体现在用户交互方面&#xff0c;也就是用户体验了&#xff0c;接下来讲的是很常见的字体加粗问题 UI大找茬 深入浅出字体、字体库TextView文本渐变字体阴影、文字阴影字体加粗 - 定制化字体粗度 在开发中经常会遇到…

DFS之搜索顺序与剪枝

搜索顺序&#xff1a; 1.https://www.acwing.com/problem/content/1119/ 首先&#xff0c;我们考虑一个贪心&#xff1a; 假如说A的倒数K个字符恰好与B的前K个字符重合&#xff0c;那么我们就连接。 也就是说我们一旦匹配就直接相连而不是继续找更长的重合的一段子串。 因…