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

【C++】string类(介绍、常用接口)

🌈个人主页:秦jh__https://blog.csdn.net/qinjh_?spm=1010.2135.3001.5343
🔥 系列专栏:http://t.csdnimg.cn/eCa5z

9efbcbc3d25747719da38c01b3fa9b4f.gif

目录

string类的常用接口说明

string类对象的常见构造

​编辑

 string字符串的遍历(迭代器)

下标加[](operator[])

 迭代器iterator(begin、end)

反向迭代器(rbegin、rend)

范围for

 容量操作

 size、length、max_size、capacity

shrink_to_fit 

reserve 

 resize

at 

修改操作

 push_back

append 

 operator+=

assign 

insert 

erase 

replace 

c_str

find

string类非成员函数

relational operators

​编辑

 operator+

getline

to_string、stod


前言

    💬 hello! 各位铁子们大家好哇。

             今日更新了string的内容
    🎉 欢迎大家关注🔍点赞👍收藏⭐️留言📝

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

string类的常用接口说明

string类对象的常见构造

0ee2b9753c7643fa88c69cac07279d99.png

b9bde6d0348a4da296b2d0e95510e389.png

 第一行是构造一个空字符串。第二行是构造输入的字符串。第三行是拷贝构造。第四行是从下标为5开始的三个字符构造,当第三个参数大于末尾下标时,或者当第三个参数不写时,就会把剩下全部的字符用来构造。

9cf5a6a47a424f948885a5f606661033.png

上图中,s3是用n个字符c构造。s5是从字符串中,用前3个构造。 s0=s3是赋值。

 string字符串的遍历(迭代器)

下标加[](operator[])

045c8e58f53d419eb229d086ed218142.png

0c1c9c01e64e430b8c6248bd320f451b.png

在c++中,字符串后面是有'\0'的。但是size是不会计算'\0'的。如上图。 

648fafe24064412fa18808b1acf84abb.png

6cd289d72e964465ad24bab47b37eb97.png

下标加[]的方式,不仅可以读取,还可以修改。 

我们还发现,他有两种重载形式(this指针不同):

410eaee1337b4bc28396f630385ac203.png

如果是const修饰的,就不能修改,只能读。 

 迭代器iterator(begin、end)

9c61b2e8ac644b59acf0148c33d06324.png

6c766333a2ee496298f61d29fb20fcaf.png

迭代器iterator是一个类型,是定义在string类里面的,需要指定类域才能用。end()是最后一个有效字符的下一个位置,即‘\0’。begin()是起始位置。他模拟指针的行为,但他不是指针,因此他也可读可写。

反向迭代器(rbegin、rend)

b34980b304cb4c22a3f820d4adbeb188.png

b0b5e6cd77184f11b077cbfdf4bb5362.png


c0009df094a04cbe9b395cefd9df6079.png

c60047f04e044bf59a0d30db471ccec5.png

当我们的对象是const对象,我们要用对应的const的iterator。end也是如此。用const修饰后,就不能修改了,只能读,不能写。如果是反向的,就是    string::const_reverse_iterator 

范围for

468103ea678445129befa0e2be666966.png

范围for遍历,底层其实也是迭代器。写起来会比较简洁。 

 容量操作

 size、length、max_size、capacity

3f7d019472ce48869e5449c18d12e895.png

size和length是一样的,一般使用size。 max_size就是最大的长度,实际上没什么意义。capacity就是容量。

2b5bf89019c04229b8a8d117914c2f8c.png

capacity实际不包含'\0'占用的空间的,虽然写着15,但实际是16。31实际是32。刚开始是两倍的扩,后面就是1.5倍的扩。但是扩容机制是不确定的。 

5e708e7454ba42229d5c2bad7d90e58b.png

clear就是清除数据,但是清不清空间是不确定的。 

shrink_to_fit 

如果想清理空间,就要缩容:

634422ffdd384823a880f4d0aa4de3b2.png

4f1f3e18b02b407892a42691c2b3252a.png

 缩容会把空间减少到size的大小。清空时,最小的大小是16。 


reserve 

我们插入数据,空间不够,会自动扩容。如果想要手动扩容,就要用reserve。 

ed104af7144540b88013e7e16f0c720e.png

2315d1c9fdc044178d8cbb4f71e3bf0d.png

 如果我们知道大概需要多少空间,可以请求空间。这样就不需要频繁的扩容,频繁扩容会降低效率。不过我们申请100个,它不一定就给100个,可能会给更大的空间。如果我们给的比当前的capacity小,他就不会生效。只有比当前capacity大,才会扩容。


 resize

54c10b38304041fcb07272c415b2c487.png

871aa829a2fd4bde83af01c47c337419.png

294eb7bceb8b4d3cbd683b2910a962a9.png

821f3ffa194546bb89eebbfb0d6199f3.png

 resize是改变size的大小。如果改变后的大小比当前小,就删除。如果大于当前size,小于capacity,就插入。如果大于capacity就扩容+插入。resize有两个版本,如果第二个参数不写,就默认插入'\0',如果写了,就插入该字符。


at 

af8702f8e3fe43a9bf9e52261bee26b3.png

c02fe499479f4a97aeecc5a48bc4f81a.png

at和operator[]的使用基本一样。区别在于越界报错时,[]会报断言错误,at会报没异常的问题。

相关文章:

【C++】string类(介绍、常用接口)

🌈个人主页:秦jh__https://blog.csdn.net/qinjh_?spm1010.2135.3001.5343🔥 系列专栏:http://t.csdnimg.cn/eCa5z 目录 string类的常用接口说明 string类对象的常见构造 ​编辑 string字符串的遍历(迭代器&#xf…...

SpringBoot项目中同时支持https和http协议

实用干货!看壹哥如何在SpringBoot项目中同时支持https和http协议_springboot http htpps共存-CSDN博客...

三大排序:冒泡、选择、插入

冒泡排序: 冒泡排序(Bubble Sort)是一种简单的排序算法。它通过比较相邻元素的大小,并交换它们的位置,使较大(或较小)的元素逐渐“浮”到数组的一端,从而实现排序的目的。 下面是冒…...

Android中MultiDex优化

MultiDex基本思路 当一个Dex文件太肥的时候(方法数目太多、文件太大),在打包或在安装或运行apk也会出问题。 解决方法就是将这个硕大的Dex文件拆分成若干个小的Dex文件。 刚好一个ClassLoader可以有多个DexFile。 MultiDex主要性能瓶颈 解压缩和Dex优化(…...

MySQL 8.0 的执行计划(EXPLAIN)

MySQL 8.0 的执行计划(也称为“EXPLAIN”计划)是数据库优化器为 SQL 查询生成的步骤序列。解读执行计划可以帮助数据库管理员(DBA)和开发者理解查询如何执行,识别潜在的性能问题,并据此优化查询。 下面是如…...

leetcode——二叉树问题汇总

leetcode 144. 二叉树的前序遍历 ①递归法: /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val,…...

Android基础开发-饿汉式申请权限

1、案例,打开app时,就要申请权限 直接在onCreateView中申请所有权限就可,然后在选择的回调里边判断申请的结果 package com.example.client;import android.Manifest; import android.content.Intent; import android.content.pm.PackageMa…...

java Day7 正则表达式|异常

文章目录 1、正则表达式1.1 常用1.2 字符串匹配,提取,分割 2、异常2.1 运行时异常2.2 编译时异常2.3 自定义异常2.3.1 自定义编译时异常2.3.2 自定义运行时异常 1、正则表达式 就是由一些特定的字符组成,完成一个特定的规则 可以用来校验数据…...

Python算法题集_搜索二维矩阵

Python算法题集_搜索二维矩阵 题74:搜索二维矩阵1. 示例说明2. 题目解析- 题意分解- 优化思路- 测量工具 3. 代码展开1) 标准求解【矩阵展开为列表二分法】2) 改进版一【行*列区间二分法】3) 改进版二【第三方模块】 4. 最优算法5. 相关资源 本文为Python算法题集之…...

学习笔记:顺序表和链表(一、顺序表)

首先来个导言: 1.数组的优势:下标的随机访问,物理空间连续。数组指针用[ ]或者 * , 结构体指针用 - > 2.书写习惯 test.c写出主体框架 QelList.c写出结构体、头文件、函数声明 QelList.c写出函数的实现 3.挪动:如果从前…...

Midjourney从入门到实战:图像生成命令及参数详解

目录 0 专栏介绍1 Midjourney Bot常用命令2 Midjourney绘图指令格式3 Midjourney绘图指令参数3.1 模型及版本3.2 画面比例3.3 风格化3.4 图片质量3.5 混乱值3.6 随机数种子3.7 重复贴图3.8 停止3.8 垫图权重3.9 提示词权重分割 0 专栏介绍 🔥Midjourney是目前主流的…...

C语言分析基础排序算法——插入排序

目录 插入排序 直接插入排序 希尔排序 希尔排序基本思路解析 希尔排序优化思路解析 完整希尔排序文件 插入排序 直接插入排序 所谓直接插入排序,即每插入一个数据和之前的数据进行大小比较,如果较大放置在后面,较小放置在前面&#x…...

海格里斯HEGERLS智能托盘四向车系统为物流仓储自动化升级提供新答案

随着实体企业面临需求多样化、订单履行实时化、商业模式加速迭代等挑战,客户对物流仓储解决方案的需求也逐渐趋向于柔性化、智能化。作为近十年来发展起来的新型智能仓储设备,四向车系统正是弥补了先前托盘搬运领域柔性解决方案的空白。随着小车本体设计…...

SQLiteC/C++接口详细介绍-sqlite3类(一)

上一篇:SQLiteC/C接口简介 下一篇:SQLiteC/C接口详细介绍(二) 引言: SQLite C/C 数据库接口是一个流行的SQLite库使用形式,它允许开发者在C和C代码中嵌入 SQLite 基本功能的解决方案。通过 SQLite C/C 数据…...

基于UDP实现直播间聊天的功能

需求:软件划分为用户客户端和主播服务端两个软件client.c和server.c 用户客户端负责:1.接收用户的昵称2.接收用户输入的信息,能够将信息发送给服务端3.接收服务端回复的数据信息,并完成显示主播服务端负责:1.对所有加入直播间的用…...

html5cssjs代码 006 文章排版《桃花源记》

html5&css&js代码 006 文章排版《桃花源记》 一、代码二、解释页面整体结构:头部信息:CSS样式:文章内容: 这段代码定义了一个网页,用于展示文章《桃花源记》的内容。网页使用了CSS样式来定义各个部分的显示效果…...

勾八头歌之数据科学导论—数据采集实战

一、数据科学导论——数据采集基本概念 第1关:巧妇难为无米之炊 第2关:数据采集概念与内涵 二、数据科学导论——数据采集实战 第1关:单网页爬取 import urllib.request import csv import re# ********** Begin ********** # dataurllib.r…...

微信小程序云开发教程——墨刀原型工具入门(素材面板)

引言 作为一个小白,小北要怎么在短时间内快速学会微信小程序原型设计? “时间紧,任务重”,这意味着学习时必须把握微信小程序原型设计中的重点、难点,而非面面俱到。 要在短时间内理解、掌握一个工具的使用&#xf…...

C#与WPF通用类库

个人集成封装,仓库已公开 NetHelper 集成了一些常用的方法; 如通用的缓存静态操作类、常用的Wpf的ValueConverters、内置的委托类型、通用的反射加载dll操作类、Wpf的ViewModel、Command、Navigation、Messenger、部分常用UserControls(可绑定的Passwo…...

http协议中的强缓存与协商缓存,带图详解

此篇抽自本人之前的文章:http面试题整理 。 别急着跳转,先把缓存知识学会了~ http中的缓存分为两种:强缓存、协商缓存。 强缓存 响应头中的 status 是 200,相关字段有expires(http1.0),cache-control&…...

《AI Agent生产力部署指南:OpenClaw + vLLM 本地化实战——(三)OpenClaw与LLM工具链适配》

上一章节中我们完整介绍了如何在服务器中配置vLLM服务,如何运行vLLM,以及如何搭建本地机器作为中间跳转连接虚拟机与服务器的通信。 本章第五节完成最后一个步骤对openclaw的相关配置,让本地能成功对话虚拟机,虚拟机成功调用服务器模型。 下面直接开始吧! (五)配置ope…...

空项目文档无法生成技术内容

项目标题“mecanum2017_2”未提供有效摘要、关键词及README内容,所有输入字段均为空或无效(摘要仅为十六个日文平假名“おぼぼぼぼぼぼぼぼぼぼぼぼぼぼぼ”,无技术含义;关键词为空;README内容为空)。 根据…...

【C++可变模板参数】

C11 可变模板参数总结:搞懂参数包、包扩展和 emplace1. 为什么 C11 需要可变模板参数? 在 C11 之前,如果我们想写一个“参数个数可变、参数类型也可变”的函数,基本只能靠: 写很多重载或者用 ...(C 风格可变…...

Infoseek舆情系统决策树:在回应、沉默与引导间寻找最优解

对于许多品牌公关从业者而言,最难熬的时刻并非负面舆情爆发时的焦头烂额,而是事件初露端倪时的犹豫不决。手里攥着Infoseek舆情系统推送的早期预警,看着那条曲线正在缓慢抬头,一个终极难题摆在面前:是立刻回应以求先发…...

[具身智能-319]:分词器的词典的内容有哪些因素决定,该字典中的内容是如何构建的?英文的分词器字典多大?中文的分词器字典有多大?分别举例说明分词器字典中的内容?

分词器的词典(Vocabulary)是决定大语言模型如何“看”世界的关键组件。它不仅仅是一个单词列表,更是一个包含了各种粒度文本单元及其对应数字编号(Token ID)的映射表。 以下为你详细解析词典的决定因素、构建过程、英…...

OpenClaw+优云智算Coding Plan:从灵感到成文,再到发布的全流程AI自动化宦

1.安装环境准备 1.1.查看物理内存 [rootaiserver ~]# free -m 1.2.操作系统版本 [rootaiserver ~]# cat /etc/redhat-release 1.3.操作系统内存 [rootaiserver ~]# df -h /dev/shm/ 1.4.磁盘空间 [rootaiserver ~]# df -TH [rootaiserver ~]# df -h /tmp/ [rootaiserver ~]# d…...

Spring IOC 源码学习 事务相关的 BeanDefinition 解析过程 (XML)比

从0构建WAV文件:读懂计算机文件的本质 虽然接触计算机有一段时间了,但是我的视野一直局限于一个较小的范围之内,往往只能看到于算法竞赛相关的内容,计算机各种文件在我看来十分复杂,认为构建他们并能达到目的是一件困难…...

AI论文写作软件哪个好?实测8款AI论文生成工具,轻松完成论文创作!

论文写作是不是让你头疼?文献查找难、框架搭建慢、内容原创性低、格式不规范…别担心!其实有捷径可走——AI论文写作工具能帮你系统解决这些痛点。本文实测8款热门AI论文写作工具,帮你找到最适合的学术助手。 本文将围绕不同学习阶段&#xf…...

使用Alpine配置WSL ssh门户嘎

1. 哑铃图是什么? 哑铃图(Dumbbell Plot),有时也称为DNA图或杠铃图,是一种用于比较两个相关数据点的可视化图表。 它源于人们对更有效数据比较方式的持续探索。 在传统的时间序列比较中,我们通常使用两条折…...

不记命令也能排障:catpaw chat 实战手册俟

Julia(julialang.org)由Stefan Karpinski、Jeff Bezanson等在2009年创建,目标是融合Python的易用性、C的高性能、R的统计能力、Matlab的科学计算生态。 其核心设计哲学是: 高性能:编译型语言(JIT&#xff0…...