c++----简单了解string

        大家好,也是好久没有更新了。今天我想与大家分享的是c++中常用的便捷的应该库。哈哈。可能大家对我们c++的便捷性已经在前面有很多耳闻了。比如我们前面说的类模板。也是很便捷的。但是我们今天这个更加方便了。但缺点就是太多了。经过多年的迭代更新。这个库函数已经很强大了,但是也是因为经过这么多,有些就显得冗余了。这也导致一个资深的c++编程师也不能完全记住string库中。所以在c++官网中有我们可以搜索到。所以我们今天这里就简单简绍一些常用的string中的快捷词。那么事不宜迟我们就来讲讲常用的string。

关键词auto

        我们第一个讲的不是我们string中的库函数。哈哈,但是因为这个确实是太好用了。并且我们这篇博客就是本着为大家提供方便快捷的关键词的。所以我觉得在这里先为大家简绍一个后面都用的着的。auto。首先我们来讲讲auto的一些含义:

1:在早期 C/C++ auto 的含义是:使用 auto 修饰的变量,是具有自动存储器的局部变量,后来这个 不重要了。 C++11 中,标准委员会变废为宝赋予了 auto 全新的含义即: auto 不再是一个存储类型
指示符,而是作为一个新的类型指示符来指示编译器, auto 声明的变量必须由编译器在编译时期
推导而得
2:用 auto 声明指针类型时,用 auto auto* 没有任何区别,但用 auto 声明引用类型时则必须加 &
3:当在同一行声明多个变量时,这些变量必须是相同的类型,否则编译器将会报错,因为编译器实际 只对第一个类型进行推导,然后用推导出来的类型定义其他变量
4:auto 不能作为函数的参数,可以做返回值,但是建议谨慎使用
5:auto 不能直接用来声明数组
        也许大家现在先看这些还不能体会到auto的好处。但是大家看看我们用几个案例来给大家佐证:(1)首先我们证明的第一点是auto是一个类型指示符。并且这个指示符是自动转换的,怎么说咧,就是说,但我们创建变量的时候不需要再明确写是那个类型了。我们只需要在前面写一个auto然后后面按照平常写的一样就可以了。然后系统就会自动判断。有点像我们前面说的那个隐式类型装换。但我们这里是写了东西的。大家可以看看线面的照片来理解一下。
(2)auto的声明引用特殊不需要其他的比如说*这个我们也用一个例子来佐证
这个大家可以清楚看到我们这里是没有报错的。并且我们第一个打印的是我们的属性。我们x是int类型。后面我们的y和z打印出来的都是一样的。这是不是就表明了我们说的这些都是一样的。
(3)可以用一个auto来定义一行。但是必须是同类型的,不然会出问题。这个就与我们在c中的一点像了。嫌麻烦可以写一个类型,后面跟着就可以了。但是跟着要跟对人。不能把类型搞错了。像下面的图片一样,不能写多种类型。
(4)关于auto不能做参数这件事来说,我觉得大家应该都可以理解,毕竟我们前面建构,隐式类型装换。我们前面讲过我们的一些引用会依据参数类型来区分引用哪个。如果我们的参数都用这个的话,系统不就不知道该引用哪一个函数了吗
(5)然后就是我们的auto不能定义数组,这个大家应该理解吧,虽然我不懂是为什么,但是我们就是大佬这么想应该是有他的道理的,遵守就是了
然后讲了这么多,大家是不是就是,这个auto好像也没什么厉害的地方吧,不是不用确定定义时候的类型了嘛。我多写几个字不一样的嘛,那么接下来我们就将auto最好用的地方,

       大家看看上面的图片吧,可以简单的把第一行理解为创建了一个数组,然后我们如果用老办法复制一个新的数组的话,需要写注释的那一部分,但是如果我们用auto的话,就很少了,看起来就很简单多了嘛。已就是我们前面说过的auto自动确定数据类型,这不我们只需要确定数据来源,前面写过auto和名字就是可以了。是不是这就体现auto的作用了。

范围for

       接下来就是我们讲的第二个便捷的。听名字大家可能会比较懵。什么叫做范围for。看字面意思来说好像就是一堆for循环在一起,那么就叫做范围for。但其实1:对于一个有范围的集合而言,由程序员来说明循环的范围是多余的,有时候还会容易犯错误。因此C++11中引入了基于范围的for循环。for循环后的括号由冒号分为两部分:第一部分是范围内用于迭代的变量,第二部分则表示被迭代的范围,自动迭代,自动取数据,自动判断结束。2:范围for可以作用到数组和容器对象上进行遍历3:范围for的底层很简单,容器遍历实际就是替换为迭代器,这个从汇编层也可以看到。其实说这么多我个人觉得范围for就是简单的重新创建了一个数组,生命周期只在这个foe循环里面,然后我们可以用这个新的数组来实现打印或者其他的工作,这样能使用原数组的数据还不会改变原数组的内容。那么我们还是得用实际例子来给大家展示一下:

       我们这里举的例子是我们简单创建一个数组,然后打印,如果我们用原来的方法的话,我们就会在for里面写很多。但是我们这里却只用写简单的几个单词就可以了。这样不仅简洁了需要并且还方便。这是我们范围for的使用,当然没没有规定我们使用的时候只能是int类型。对于其他的类型也是适用的。

string构造函数

        好了,终于到我们现在所说的string的内容了。首先我们来介绍的就是String中最基础的一些使用方法。这就有点像我们前面说的This指针。虽然我们写的名字都是一样的,但是它会根据我们的参数类型不同而自动引用不同的函数,这里的string也是一样的。我们这里的string会根据我们括号里面的不同内容来实现不同的效果,例如

      上面图片中写了4个string的基础使用方法。也是我们比较常用的。分类也表示一个构造新的对象,和用一个新的数组来创建另一个数组。接着是确认内对象中的数据为多少个统一的字符?然后最后是拷贝构造函数。

        这里我就向大家展示了我们上面的三个重点例子,除了第一个创建一个类型的,我们没有,因为第一个是如果我们不写东西的话是一个空字符号打出来不好,所以我们就写了其他三个。大家可以借鉴的使用,我们如果想使用对应的库函数的话,就需要确定我们括号里面的参数与我们库函数中的是对应的,然后并且参数没问题,那么它就会自动用我们库函数并实现。但是我们这里还只是简单的对我们的函数啊数组这些进行使用。也说过c++是经过多年的变化更新迭代进化而来的所以我们的string肯定不止这一些。

string容量大小

        接下来我们要讲的就是中的关于容量大小的操作。对于容量大小,大家在我们以前的堆列中或者堆中都有个使用,因为我们需要开辟空间,所以是需要考量空间是否够,然后需否需要申请新的空间大小,这是我们以前在c中使用的,所以在c加加中大佬就看到了这一点。我们准备了方便我们日后使用。那么我们还是抽几个重点,然后给大家演示一下,然后关于其他的到时候我会在最后放一个链接,大家可以直接点链接跳到c加加的官网中查看,当然因为c++是国外的,所以是英文,大家可以拿手机拍照翻译。我觉得这是差不多的。

       首先我先去给大家解释一下关于size和length,它的效果其实是一样的,都是返回字符串的有效长度。所以大家其实掌握其中一个就可以了,其实我更倾向于size,毕竟我们使用了很多size,肯定使用的更加方便。   好了,我这儿还是向大家简单解释一下如何使用。

       其实对于容量大小的使用的话,就只需要记住我们几个关键的啊,词语就可以了。然后将其打印或者用到我们想用的地方,那么这个关键词就使用好了。

string类对象的访问及遍历操作

        我们接下来讲的就是我们的中关于字符一些使用方法。例如开头或者结尾,我们就不需要再计算大小了,我们可以直接引用或者直接返回某点的位置。那我们还是像以前一样先写几个关键词,然后再使用。我们举个例子,然后让大家了解一下如何使用。

       我们就以一个简单的例子便利一遍,我们很久以前就知道使用。关于便利我们有很多种方法,我们就用我们这里面的三种方法,分别是begin reading和for。我们可以很清楚的看到begin和中的区别就是多了一个,然后这里代表的意思就是begin代表从左往右开始数的头和尾,然后代表的是从右往左数的开头和尾。就相当于他们是倒过来的,一个是从左位头,然后一个是以右作为头。但其实大家也看到了作用方法是一样的,就只是开头和结尾不一样而已。所以大家稍微知道string对于中类对象的访问和遍历的使用方法了吧。

string类对象的修改操作

       当我们实现了对类的访问和便利的操作之后,我们就来对内进行修改改变。这个就是我们对字符串的一些修改,例如在后面加一个什么或者某个位置开始返回后面的字符等等。当然具体有什么作用,用在什么地方,这个暂时谁也保证不了,所以大家在后面实际使用的时候再讨论

       关于我们本金小结说的是类的对象和修改,大家可以主要看我们上面的几个例子。后面是为大家补充补充的知识,大家感兴趣的话可以关注一下。那也可以看到我们最后的打印结果是由我们输入的是一样的。我们肯定不能一下子将他如何运用到实际情况,大家可以稍微先磨合一下,然后再讨论具体如何延伸。

string类非成员函数

        接下来为大家分享的就是我们中不是成员的函数了。虽然大家可能在上一个小节中已经看到了一些重载函数。比如什么+=呀这些。接下来我们就给大家讲的是其他的一些。大家可以看一下下面的图片。

     我想与大家主要分享的是最后两个,一个是获取一行字符串,另外一个是比较大小。然后我们这里着重对这两个举例证明。

       首先我们举的例子getline就是我们的scanf。的区别是我们这个可以自主确定我们以什么为结束点。我们以前的scanf就是以回车键为确定,但是我们这个可以自己确定为一个什么符号,例如空格,数字一或者其他的什么作为我们的终止符号。这里我们是没有写,但如果我们没写的话,他会默认为回车键,为我们的终止符号。

       接下来就是我们的比较大小了。 是我们简单的判断他们是否相等。利用首先是利用第一个ascll码值,第一个字符串的码值,然后比较如果相等或者怎么样,再判断第二个,第三个,一直到得出符合结论就可以结束了。

       这里我就不向大家一一解释了,大家只需要挨着对照看是否利用ascll来判断和他们的使用方法是如何的就可以了。

总结

       好的,上面是你们基础会常用到的string中的一些基础内容,然后对于我们现在的其需要是差不多了,当然我们其中的内容肯定还不止这一点。后面后续工作如果对需要的话,可以点击下面的链接,它会自动跳转到c加加的官网中,并且是的库中,然后大家自主寻找。当然这些都是英文的,这个大家可以翻译为中文,毕竟电脑浏览器都会跳出是否编译的弹窗的。https://cplusplus.com/reference/string/string/?kw=string并且如果大家对我后来的中库函数中的一些关键词不知道什么使用的时候,它下面还是会有具体的使用方法的,例如我的前面的几个例子都在库中用过方法。

    剩下是大家如果对于我这篇博客中的示例代码感兴趣的话可以点击下面的链接就会自动跳转了。

8月18人: 博客代码以及日常练习

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

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

相关文章

2024.8.15(python管理mysql、Mycat实现读写分离)

一、python管理mysql 1、搭建主mysql [rootmysql57 ~]# tar -xf mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz [rootmysql57 ~]# cp -r mysql-5.7.44-linux-glibc2.12-x86_64 /usr/local/mysql [rootmysql57 ~]# rm -rf /etc/my.cnf [rootmysql57 ~]# mkdir /usr/local/mysql…

qt-13 进度条(模态和非模态)

进度条-模态和非模态 progressdlg.hprogressdlg.cppmain.cpp运行图模态非模态 progressdlg.h #ifndef PROGRESSDLG_H #define PROGRESSDLG_H#include <QDialog> #include <QLabel> #include <QLineEdit> #include <QProgressBar> #include <QCombo…

[书生大模型实战营][L0][Task2] Python 开发前置知识

0. 任务&#xff1a;在 InternStudio 环境中实现功能&#xff1a; python 实现 wordcount函数&#xff0c;统计英文字符串单词的使用频率&#xff0c;并返回字典&#xff1b;vscode 远程调试 InternStudio 中的 python 代码 1. wordcount 函数实现 string.punctuation 是一个…

一键切换全球优质Linux 系统软件源及 Docker 源,轻松安装 Docker —— 适配广泛、零门槛、超强功能的开源脚本!

概述 linuxMirrors开源脚本为 GNU/Linux 系统用户提供了强大的工具,帮助用户轻松更换系统软件源并安装 Docker。脚本适配了多种国内外镜像站,经过测试具备良好的下载速度和 IPv6 兼容性,并且还包括了中国大陆教育网镜像站的选项。无需技术背景,文档提供了详尽的操作指引和常…

机器学习(3)-- 一元线性回归

文章目录 线性回归训练模型测试模型线性回归方程测试实用性 总结 线性回归 线性回归算法是一种用于预测一个或多个自变量&#xff08;解释变量&#xff09;与因变量&#xff08;响应变量&#xff09;之间关系的统计方法。这种方法基于线性假设&#xff0c;即因变量是自变量的线…

【网络安全】重置密码token泄露,实现账户接管

未经许可&#xff0c;不得转载。 文章目录 正文 正文 对某站点测试过程中&#xff0c;登录账户触发忘记密码功能点&#xff0c;其接口、请求及响应如下&#xff1a; PUT /api/v1/people/forgot_password 可以看到&#xff0c;重置密码token和密码哈希均在响应中泄露。 删除co…

【C#】虚部与实部

实数是数学中的一个基本概念&#xff0c;它包括了所有的有理数和无理数。实数集合是连续的&#xff0c;可以表示为数轴上的每一个点。 复数是实数的扩展&#xff0c;它允许进行除零以外的所有基本算术运算。复数由两部分组成&#xff1a;实部和虚部。 实部&#xff08;Real P…

【MySQL 07】表的增删查改 (带思维导图)

文章目录 &#x1f308; 一、insert 添加数据⭐ 1. 单行数据 全列插入⭐ 2. 多行数据 指定列插入⭐ 3. 插入否则更新⭐4. 插入否则替换 &#x1f308; 二、select 查询数据⭐ 1. select 列&#x1f319; 1.1 全列查询&#x1f319; 1.2 指定列查询&#x1f319; 1.3 查询字段…

Prettier+Vscode setting提高前端开发效率

文章目录 前言Prettier第一步&#xff1a;下载依赖&#xff08;团队合作&#xff09;或下载插件&#xff08;独立开发&#xff09;第二步&#xff1a;添加.prettierrc.json文件**以下是我使用的****配置规则** 第三步&#xff1a;添加.prettierignore文件**以下是我常用的****配…

OpenCV图像滤波(20)模糊处理函数stackBlur()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 stackBlur() 函数用于对图像进行模糊处理。该函数对图像应用了 stackBlur 技术。stackBlur 可以生成与高斯模糊相似的结果&#xff0c;而且随着模…

C++ 左值引用与右值引用超详解

目录 一 左值与右值 1.左值 2.右值 3.总结 二 左值引用与右值引用 1.左值引用 2.右值引用 3.总结与探究 3.1右值引用可以修改么&#xff1f;取地址么&#xff1f; 3.2左值引用与右值引用转化 左值引用 引用 右值 右值引用 引用 左值 3.3左值引用与右值引用相同之处 3.4左值…

栈与队列 - 逆波兰表达式求值

150. 逆波兰表达式求值 方法一&#xff1a;栈 /*** param {string[]} tokens* return {number}*/ var evalRPN function(tokens) {const stack [];for (const token of tokens) {if (isNaN(Number(token))) { // 非数字const n2 stack.pop(); // 出栈两个数字const n1 s…

【Unity开发】几种空值判断的性能测试

【Unity开发】几种空值判断的性能测试&#xff09; 项目优化过程中&#xff0c;一个非常细节的优化&#xff0c;就是在项目数据处理过程中&#xff0c;会用大量的null和“”空值的判断&#xff0c;参考了一些网友说的性能差别很大&#xff0c;是不是真的需要优化的问题&#xf…

16:【stm32】I2C的使用一:I2C片上外设的使用

I2C 1、片上外设1.1&#xff1a;寄存器与内部结构 2、通过I2C向外发送数据2.1&#xff1a;I2C的初始化2.1.1&#xff1a;初始化SCL和SDA2.1.2&#xff1a;使能时钟PCLK1&#xff08;APB1&#xff09;2.1.3&#xff1a;配置I2C1的参数 2.2&#xff1a;发送数据2.2.1&#xff1a;…

Ⅰ、基于 WebGPU 从 0 到 1 渲染 GLTF:第一个三角形

Ⅰ、基于 WebGPU 从 0 到 1 渲染 GLTF&#xff1a;第一个三角形 WebGPU 是一种面相网页的现代图形 API&#xff0c;由主要浏览器供应商开发。与 WebGL 相比&#xff0c;WebGPU 对 GPU 提供了更直接的控制&#xff0c;使应用程序能更有效地利用硬件&#xff0c;类似于 Vulkan 和…

如何在C++ QT 程序中集成cef3浏览器组件去显示网页?

目录 1、问题描述 2、为什么选择cef3浏览器组件 3、cef3组件的介绍与下载 4、将cef3组件封装成sdk 5、如何使用cef3组件加载web页面 5.1、了解CefApp与CefClient 5.2、初始化与消息循环 5.3、如何创建浏览器 5.4、重载CefClient类 6、在qt客户端集成cef组件 7、最后…

「12月·长沙」第三届传感、测量、通信和物联网技术国际会议(SMC-IoT 2024)

第三届传感、测量、通信和物联网技术国际会议&#xff08;SMC-IoT 2024&#xff09;将于2024年11月29日-2024年12月1日召开&#xff0c;由湖南涉外经济学院主办。会议中发表的文章将会被收录, 并于见刊后提交EI核心索引。 会议旨在围绕传感、测量、通信和物联网技术等相关研究…

基于node.js的宠物寄存管理系统,基于express的宠物寄存系统

摘 要 伴随着社会以及科学技术的发展&#xff0c;互联网已经渗透在人们的身边&#xff0c;网络慢慢的变成了人们的生活必不可少的一部分&#xff0c;紧接着网络飞速的发展&#xff0c;系统管理这一名词已不陌生&#xff0c;越来越多的宠物店等机构都会定制一款属于自己个性化…

DWA局部路径规划算法

DWA——Dynamic Window Approach动态窗口法 发展 动态窗口法是一种局部路径规划算法&#xff0c;起源于对移动机器人在复杂环境中实时避障的需求。该算法由F. D. Proentzen和O. Khatib提出&#xff0c;后经过不断优化&#xff0c;已成为移动机器人领域中的标准算法之一。 运…

xss.function靶场(hard)

文章目录 WW3源码分析源码 DOMPpurify框架绕过覆盖变量notifyjs作用域和作用链域构建payload WW3 源码 <!-- Challenge --> <div><h4>Meme Code</h4><textarea class"form-control" id"meme-code" rows"4"><…