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的前缀。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

如何从数字化迈向智能化的跨越,重塑企业合同管理的未来

随着信息技术的快速发展&#xff0c;越来越多的企业开始认识到合同管理的重要性&#xff0c;并纷纷实施数字化战略以提高管理效率和降低运营成本。然而&#xff0c;仅仅实现合同管理的数字化还远远不够&#xff0c;真正的转型应该是向智能化迈进。本文将通过一个实际案例来探讨…

书生浦语XTuner 微调个人小助手

文章目录 一、环境配置与数据准备1.构建一个xtuner环境2.安装 XTuner3.修改提供的数据四、训练启动1.模型位置2.创建软连接即可3.修改官方的Config4.启动微调4.权重转换4. 模型合并二、进阶任务2.1 上传到 HuggingFace 一、环境配置与数据准备 XTuner 文档链接&#xff1a;XTu…

信捷 XDH PLC C语言 Ethercat 简易绝对运动 BMC_A_DRVA_BODY函数

本文以简易运动为例&#xff0c;描述多轴运动的程序封装。具有一定的参数价值。适用于信捷XDH PLC。 很容易移植到具有Ethercat 总线的PLC,使用ST语言的情况。 1.建立结构体 2.在全局变量表建立全局变量 &#xff08;1&#xff09;DRVA_PAR_array是类型为BMC_A_DRVA&#xff…

磐石云黑名单管理系统

黑名单验证平台是一款基于历史高风险号码实时验证的管理平台&#xff1b; 功能特点&#xff1b; 1、支持代理商账户 2、支持对接三方黑名单库进行缓存&#xff08;俗称扒库&#xff09;&#xff0c;首次获取黑名单后缓存到本地&#xff0c;下次不再付费调用三方接口&#xf…

Objects工具类详解

在 Java 编程中&#xff0c;对象的处理是不可避免的。为了简化对象操作并减少空指针异常&#xff08;NullPointerException&#xff09;的风险&#xff0c;Java 7 引入了 java.util.Objects 类。这个类包含了一系列静态方法&#xff0c;旨在帮助开发者更安全、更高效地处理对象…

InnoDB存储引擎

6.1 逻辑存储结构 InnoDB的逻辑存储结构如下图所示: 6.2 架构 6.2.1 概述 MySQL5.5 版本开始&#xff0c;默认使用InnoDB存储引擎&#xff0c;它擅长事务处理&#xff0c;具有崩溃恢复特性&#xff0c;在日常开发中使用非常广泛。下面是InnoDB架构图&#xff0c;左侧为内存结…

如何使用.bat实现快速电脑关机?

1、在电脑桌面新建一个记事本文档&#xff0c;将如下内容写进去&#xff1a; echo off shutdown /s /t 02、然后&#xff0c;保存一下&#xff0c;再把桌面此文件重命名为电脑关机.bat 3、双击此程序&#xff0c;可以立刻关机电脑。 PS&#xff1a;① 此程序会不保存任何当前…

表的设计(MYSQL)

表的设计方法 范式 第一范式 第二范式 第三范式 实现方式 程序实现

【再谈设计模式】抽象工厂模式~对象创建的统筹者

一、引言 在软件开发的世界里&#xff0c;高效、灵活且易于维护的代码结构是每个开发者追求的目标。设计模式就像是建筑蓝图中的经典方案&#xff0c;为我们提供了应对各种常见问题的有效策略。其中&#xff0c;抽象工厂模式在对象创建方面扮演着重要的角色&#xff0c;它如同一…

R语言机器学习与临床预测模型77--机器学习预测常用R语言包

R小盐准备介绍R语言机器学习与预测模型的学习笔记 你想要的R语言学习资料都在这里&#xff0c; 快来收藏关注【科研私家菜】 01 预测模型常用R包 常见回归分析包: rpart 包含有分类回归树的方法; earth 包可以实现多元自适应样条回归; mgev包含广义加性模型回归; Rweka 包中的M…

使用OpenGL ES简单实现一个特效

玩抖音的时候&#xff0c;刷到一个抖音红发GET特效&#xff0c;感觉实现起来应该不太难。 于是小试牛刀。以刷到的一个视频一帧为原图 抖音红发GET特效拍出来的效果为 我实现的效果为&#xff1a; 基于Android平台&#xff0c;以OpenGL ES为工具&#xff0c;开发了一个滤镜…

豆包MarsCode算法题:数组元素之和最小化

数组元素之和最小化 问题描述思路分析分析思路解决方案 参考代码&#xff08;Python&#xff09;代码分析1. solution 函数2. 计算 1 2 3 ... n 的和3. 乘以 k 得到最终的数组元素之和4. 主程序&#xff08;if __name__ __main__:&#xff09;代码的时间复杂度分析&#x…

WebRTC视频 05 - 视频采集类 VideoCaptureDS 下篇

WebRTC视频 01 - 视频采集整体架构 WebRTC视频 02 - 视频采集类 VideoCaptureModule WebRTC视频 03 - 视频采集类 VideoCaptureDS 上篇 WebRTC视频 04 - 视频采集类 VideoCaptureDS 中篇 WebRTC视频 05 - 视频采集类 VideoCaptureDS 下篇&#xff08;本文&#xff09; 一、前言…

ffmpeg 最强大的视频工具

文章目录 一、ffmpeg安装二、基本用法1、文件格式转换2、视频过滤器 filter3、剪切4、合并5、音频过滤器6、删除轨道7、简单应用&#xff1a;录屏 一、ffmpeg安装 windows下可以上官网 https://www.ffmpeg.org/download.html下载&#xff1a; 下载好后&#xff0c;解压缩&…

初识算法 · 位运算(2)

目录 前言&#xff1a; 判定字符是否唯一 丢失的数字 比特位计数 只出现一次的数字III 前言&#xff1a; ​本文的主题是位运算&#xff0c;通过四道题目讲解&#xff0c;一道是判断字符是否唯一&#xff0c;一道是只出现一次的数字III&#xff0c;一道是比特位计数&…

大数据新视界 -- 大数据大厂之 Impala 性能优化:基于数据特征的存储格式选择(上)(19/30)

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

[产品管理-76]:延续是创新与颠覆式创新的比较

目录 一、概述 1、定义与特征 2、市场影响与竞争策略 3、实施难度与风险 4、案例分析 二、示例 1. 延续性创新示例 2. 创新示例 3. 颠覆式创新示例 一、概述 延续性创新与颠覆式创新是技术创新领域的两种重要策略&#xff0c;它们在多个方面存在显著差异。 以下是对…

JAVA学习日记(十五) 数据结构

一、数据结构概述 数据结构是计算机底层存储、组织数据的方式。 数据结构是指数据相互之间以什么方式排列在一起的。 数据结构是为了更加方便的管理和使用数据&#xff0c;需要结合具体的业务场景来进行选择。 二、常见的数据结构 &#xff08;一&#xff09;栈 特点&…

自动化测试工具Ranorex Studio(三十)-代码模块中使用变量快照

为了在代码模块中使用数据连接器提供的值&#xff0c;你需要在代码中添加一个变量。使用右键菜单项’Insert Module Variable’。 添加一个新的变量到您的代码模块 指定变量名和默认值 通过添加一个新的变量&#xff0c;Ranorex Studio 会在光标位置插入一段新代码——由一个…

Python技巧:查询模块的版本号的方法

1,pycharm里面的 Python interpreter 或者 Python package 2&#xff0c;通过 __version_info__ import matplotlib print(matplotlib.__version_info__) 3&#xff0c;查看目录里面的 _version.py 文件