c++:string(一)
文章目录
- 一string类
- 1C语言中的字符串
- 2C++中的string
- 二遍历
- 1[ ]
- 2迭代器
- 3const迭代器
- 4范围for
- 5auto
- 6总结
- 三String的尾插
- 1size和length
- 2max_size,capacity和clear
- 3访问接口
- 4尾插字符和字符串
- 5 append的重载
- 三string的扩容问题
- (1)怎么扩容
- (2)reserve和reverse
一string类
1C语言中的字符串
C语言中,字符串是以’\0’结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列
的库函数,但是这些库函数与字符串是分离开的,不太符合OOP的思想,而且底层空间需要用户
自己管理,稍不留神可能还会越界访问。
姓名。地址,
2C++中的string
在使用string类时,必须包含#include头文件以及using namespace std;
auto和范围for
我们马上在下文会提到这两个特别好用的用法,希望大家注意
string类本身是basic_string typedef的过来的

basic_string本身是一个模板
注意事项
(1)c++中的string类是包含在string头文件里的,所以要包含string
(2)容器和类里面一般会有接口,包括一些写好的函数和特殊定义(比如size,capacity)都叫接口
(3)c++一开始设计的时候没有容器的概念,string与后面的容器有一些不一样。具体表现是string的 接口非常多而杂,有些甚至重复定义,这是为了与后面的迭代器保持一致,但是以前多的不能删,后面c++的内容也只能兼容string.
二遍历
1[ ]
这里[ ]属于element access(元素获取)个人认为有点像访问的关键字
这里设置的非常巧妙,本来string类不能像数组一样访问下标直接访问或者遍历全部元素的,但是我们可以认为规定位置,然后返回进行访问,这样起到了数组下标访问问的效果
这样我们就可以进行遍历


2迭代器
迭代器差不多类似于指针,但是底层不同,string的迭代器类似于指针,下面it1类似于指针,cout*it1类似于解引用。
但其他的容器不一定。
迭代器差不多类似于指针,但是底层不同,string的迭代器类似于指针,但其他的容器不一定。

反向迭代器,从end往begin输出
3const迭代器
const对象不能使用普通迭代器


看上面的const对象如果像进行定义就要进行const修饰迭代器,这也是权限的放大 。
4范围for
我们以前遍历一些东西都要用(for int i=xx;i<xxx;i++)但是我们学了范围for可以方便的定义遍历
for(xx a:xxx)
是吧xxx从头到位赋值给a,然后一个个输出,编译器自动识别开头和结尾 、
xx是定义的类型
5auto
四种迭代器iterate,const iterate,reverse_ iterate,const reverse_ iterate
然后可以定义后直接 auto xxx=xxx.begin();这样不用指明很长的类型
然后上面的for遍历for(xx a:xxx)
xx可以写成auto,自动识别xxx的类型给auto

但是不会推出引用,要自己写一个&

现在auto引用时定义迭代器可以短一点


修改的时候要加&,因为是把s1一个个赋值给ch然后输出。下次cout时候就没用了,
但是一开始赋值给别名就进行前置修改了。
6总结
三种遍历方法,[],迭代器,范围for
范围for底层是迭代器,所以只有容器中支持迭代器的才支持范围for
因为数组底层和迭代器差不多,所以也支持范围for
auto是一个自动识别的类型,在定义迭代器类型一般是很多的字母,可以用auto
三String的尾插
1size和length

推荐size 因为其他容器也兼容size,这就二中注意事项中string臃肿的部分
2max_size,capacity和clear
这三个都是接口,max_size是最大下标,
capacity和栈中一样是空间可以扩容,
clear是把size直接搞成0。

3访问接口
at,[]
我们在遍历中知道[ ]怎么访问的了
下面我们介绍at
at和[]的不同是如果访问到非法处理方式不一样,at要抛出异常,然后捕获what(),如图:
[]异常是:
4尾插字符和字符串
尾插字符是push_back
尾插字符串是append
5 append的重载
我们不仅可以用接口,接口其实也有许多重载,这里我们就不细说了
三string的扩容问题
(1)怎么扩容
根据编译器的不同扩容方式不一样,这里是vs2022,它在后面一般是1.5倍的扩容。

(2)reserve和reverse
reverse是一个扩容接口(函数),反正我们如果提前知道要扩容多大可以直接提前reverse,他会提前开好一个比较大的空间,这样就不要频繁的扩容,在堆上开空间,
reverse有反转的意思,一般命名时候用到,上文的反向迭代器就加了reverse的前缀。
相关文章:
c++:string(一)
文章目录 一string类1C语言中的字符串2C中的string二遍历1[ ]2迭代器3const迭代器4范围for5auto6总结三String的尾插1size和length2max_size,capacity和clear3访问接口4尾插字符和字符串5 append的重载三string的扩容问题(1)怎么扩容(2&#…...
github和Visual Studio
1、代码下载和提交 GitHubDesktopSetup-x64.exe 使用很简单,自己稍微琢磨下就明白了。 2、Visual Studio 2022 2.1 安装组件及学习内容 Visual Studio 中的 CMake 项目 | Microsoft Learn 2.2 打开 CMakeLists.txt 文件 定位并选择 CMakeLists.txt 文件 …...
django框架-settings.py文件的配置说明
以下是一些Django的核心配置和其默认值. 下面列出了contrib应用提供的配置, 后面是核心配置的专题索引. 关于介绍性资料, 详见 settings指南. ABSOLUTE_URL_OVERRIDES 默认值: {} (空字典) 它是一个将 “app_label.model_name” 字符串映射到接受模型对象并返回其URL的函数的…...
【C语言】缺陷管理流程
请解释一下缺陷管理流程,包括缺陷的发现、跟踪、验证和关闭等环节。 缺陷管理流程是一种软件质量保证过程,其目的是识别、记录、分析、解决并最终消除程序中的错误或问题。以下是这个流程的主要步骤: 缺陷发现 (Bug Discovery): 这通常是通过…...
基于深度学习的猫狗识别
基于深度学习的猫狗识别是计算机视觉领域中的一个经典问题,它主要利用深度学习技术来训练和构建模型,以便能够自动区分和识别图像中的猫和狗。以下是一个基于深度学习的猫狗识别的简要介绍: 一、数据集准备 要实现猫狗识别,首先需…...
java组件安全
Solr 默认端口:8983 命令执行(cve-2019-17558) 影响版本:5.0.0-8.3.1 https://github.com/jas502n/solr_rce 远程命令执行(cve-2019-0193) 影响版本:<8.2.0 条件:DataImport…...
【MongoDB】MongoDB的核心-索引原理及索引优化、及查询聚合优化实战案例(超详细)
文章目录 一、数据库查询效率问题引出索引需求二、索引的基本原理及作用(一)索引的创建及数据组织(二)不同类型的索引(三)索引的额外属性 三、索引的优化与查询计划分析(一)通过prof…...
qt QProcess详解
1、概述 QProcess是Qt框架提供的一个类,它用于在应用程序中执行外部进程。QProcess提供了一系列函数来启动、控制和与外部进程进行交互,使得开发者能够在自己的应用程序中集成和调用其他程序或服务。这个类在需要执行系统命令、启动其他应用程序或进行文…...
软件测试面试2024最新热点问题
大厂面试热点问题 1、测试人员需要何时参加需求分析? 如果条件循序 原则上来说 是越早介入需求分析越好 因为测试人员对需求理解越深刻 对测试工作的开展越有利 可以尽早的确定测试思路 减少与开发人员的交互 减少对需求理解上的偏差 2、软件测试与调试的关系 测…...
10款录屏工具推荐,聊聊我的使用心得!!!!
录屏软件已经成为我们的得力助手。不管是学习还是培训,或者工作会议等都时常需要录屏操作。经过深入实践和对比,我尝试了多款录屏软件。现在,我就来聊聊我个人使用过的几款录屏软件:我会尽量用最通俗的语言,分享我对这…...
VMware+Ubuntu+finalshell连接
安装教程:博客链接 下载地址:VMwareubuntu finalshell官网下载:finalshelll...
autodl+modelscope推理stable-diffusion-3.5-large
本篇介绍如何在服务器上实现SD3.5模型的加载及推理,不包含训练及微调。 磁盘扩容 autodl服务器在关机状态下,进行扩容: 选择要扩容的大小(比如我这里已经扩了80G,默认有50G免费的),就会有一…...
深度学习之 LSTM
1.1 LSTM的产生原因 RNN在处理长期依赖(时间序列上距离较远的节点)时会遇到巨大的困难,因为计算距离较远的节点之间的联系时会涉及雅可比矩阵的多次相乘,会造成梯度消失或者梯度膨胀的现象。为了解决该问题,研究人…...
LeetCode 3242.设计相邻元素求和服务:哈希表
【LetMeFly】3242.设计相邻元素求和服务:哈希表 力扣题目链接:https://leetcode.cn/problems/design-neighbor-sum-service/ 给你一个 n x n 的二维数组 grid,它包含范围 [0, n2 - 1] 内的不重复元素。 实现 neighborSum 类: …...
【AliCloud】ack + ack-secret-manager + kms 敏感数据安全存储
介绍 ack-secret-manager支持以Kubernetes Secret实例的形式向集群导入或同步KMS凭据信息,确保您集群内的应用能够安全地访问敏感信息。通过该组件,您可以实现密钥数据的自动更新,使应用负载通过文件系统挂载指定Secret实例来使用凭据信息&a…...
探索JavaScript的强大功能:从基础到高级应用
随着互联网技术的不断发展,JavaScript已经成为现代Web开发的基石。无论是简单的交互效果,还是复杂的前端框架,JavaScript都在其中扮演着不可或缺的角色。本文旨在对JavaScript进行深入探讨,从其基础概念到高级应用,并讨…...
新增支持Elasticsearch数据源,支持自定义在线地图风格,DataEase开源BI工具v2.10.2 LTS发布
2024年11月11日,人人可用的开源BI工具DataEase正式发布v2.10.2 LTS版本。 这一版本的功能变动包括:数据源方面,新增了对Elasticsearch数据源的支持;图表方面,对地图类和表格类图表进行了功能增强和优化,增…...
Spark的容错机制
1,Spark如何保障数据的安全 1、RDD容错机制:persist持久化机制 1)cache算子 - 功能:将RDD缓存在内存中 - 语法:cache() - 本质:底层调用的还是persist(StorageLevel.MEMORY_ONLY)&…...
YOLOv8改进 | 利用YOLOv8进行视频划定区域目标统计计数
简介 本项目旨在利用YOLOv8算法来实现视频中划定区域目标的统计计数。YOLOv8是一种目标检测算法,能够实现实时目标检测和定位。视频划定区域目标统计计数是指在一个视频中,对于指定的区域,统计出该区域内出现的目标物体数量。 该项目的工作流程如下:首先,利用YOLOv8算法…...
基于yolov8、yolov5的番茄成熟度检测识别系统(含UI界面、训练好的模型、Python代码、数据集)
摘要:番茄成熟度检测在农业生产及质量控制中起着至关重要的作用,不仅能帮助农民及时采摘成熟的番茄,还为自动化农业监测提供了可靠的数据支撑。本文介绍了一款基于YOLOv8、YOLOv5等深度学习框架的番茄成熟度检测模型,该模型使用了…...
突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...
Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...
【入坑系列】TiDB 强制索引在不同库下不生效问题
文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...
visual studio 2022更改主题为深色
visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成...
【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...
2023赣州旅游投资集团
单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...
快刀集(1): 一刀斩断视频片头广告
一刀流:用一个简单脚本,秒杀视频片头广告,还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农,平时写代码之余看看电影、补补片,是再正常不过的事。 电影嘛,要沉浸,…...
安卓基础(Java 和 Gradle 版本)
1. 设置项目的 JDK 版本 方法1:通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分,设置 Gradle JDK 方法2:通过 Settings File → Settings... (或 CtrlAltS)…...
【前端异常】JavaScript错误处理:分析 Uncaught (in promise) error
在前端开发中,JavaScript 异常是不可避免的。随着现代前端应用越来越多地使用异步操作(如 Promise、async/await 等),开发者常常会遇到 Uncaught (in promise) error 错误。这个错误是由于未正确处理 Promise 的拒绝(r…...
抽象类和接口(全)
一、抽象类 1.概念:如果⼀个类中没有包含⾜够的信息来描绘⼀个具体的对象,这样的类就是抽象类。 像是没有实际⼯作的⽅法,我们可以把它设计成⼀个抽象⽅法,包含抽象⽅法的类我们称为抽象类。 2.语法 在Java中,⼀个类如果被 abs…...














