【C++初阶】第7课—标准模版库STL(string_1)

news2025/1/19 7:54:31

文章目录

  • 1. 什么是STL
  • 2. STL六大组件
  • 3. 标准库中string类
    • 3.1 auto关键字
    • 3.2 范围for
    • 3.3 string类的类型
    • 3.4 string类的常用接口(string类对象的常见构造)
    • 3.5 string的析构和赋值运算符重载
    • 3.6 string类对象的容量操作

1. 什么是STL

  • STL(standard template library—标准模板库):是C++标准库的重要组成部分,而且它还是一个涵盖数据结构与算法的软件框架
  • STL发展至今一共出现4个版本,原始版本、P.J.版本、RW版本、SGI版本,而我们主要学习第4个版本,它的命名风格和编程风格阅读性非常高

2. STL六大组件

在这里插入图片描述


  • STl六大组件的内容有点多,不过也有一些我们之前见过的Stack、Queue等,它就是集数据结构与算法的一个标准库,所有内容后期会慢慢讲,今天先来学习第一个,容器中的string类,容器说白了,就是数据结构

3. 标准库中string类

  • C语言标准库提供了一些str系列的库函数,用来处理字符串,但是这些库函数和字符串是分离开的,底层空间需要用户自己管理,可能还会越界访问,因此C++特别引入了string类来进一步完善字符串的操作
  • 在讲string前,先学习2个在string类里面经常使用的auto和范围for

3.1 auto关键字

  • C++11之前,auto修饰的变量,是具有自动存储器的局部变量,之后C++11赋予auto全新的含义:auto不再是一个存储类型的指示符,而是作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导可得
  • 简单的说,auto修饰的变量,它的类型是由操作符右边的对象推导出来的

在这里插入图片描述


  • 一行声明多个变量时,这些变量的类型必须相同,否则编译器会报错,编译器只对第一个类型推导,然后用退出来的类型定义其他变量
  • auto不能作为函数的参数,但是可以做返回值
  • auto不能直接用来声明数组

在这里插入图片描述


在这里插入图片描述


  • 上面简单介绍了auto的用法,它是根据已知对象的类型来推导新创建的对象,但是上面的场景一般不用auto,按照之前的逻辑写就没有任何问题,为何还要多此一举呢?但是有些场景下,auto用起来就比较爽

在这里插入图片描述


  • 这是一个容器,可以看出dict这个对象的类型就挺长,map就是一个容器,这个我们以后讲,这里先见识一下auto的使用场景

3.2 范围for

  • 对于一个有范围的集合,程序员自己来说明循环的范围有点多余,还容易出错,因此C++11引入了范围for的概念,它从冒号:开始分为两部分,冒号前面接迭代的变量,最后+迭代的范围
  • 范围for自动迭代,自动取数据,自动判断结束
  • 范围for可以用到数组和容器对象上的遍历
  • 范围for的底层很简单,容器遍历就是替换为迭代器,这个我们以后会讲

在这里插入图片描述


  • 范围for在遍历数组时,从起始位置开始将元素赋值给对象e,然后数组指向下个元素,再将数组下个元素赋值给元素e,以此类推,直到遍历完整个数组
  • 如果不想让数组arr赋值给对象e,可以使用引用
  • 范围for有三个自动:自动取对应容器(如:数组、列表等)里面的元素,自动++找下个元素,自动判断结束
for (auto element : range) {
    // 在这里处理element
}
  • range可以是数组、列表、向量或者任何可以生成迭代器的范围

在这里插入图片描述


在这里插入图片描述


3.3 string类的类型

  • C++string类中引入了几个char类型,简单了解下
  • wchar_t是宽字节类型,大小为2个字节
  • char16_t为2个字节,char32_t为4个字节大小

在这里插入图片描述


3.4 string类的常用接口(string类对象的常见构造)

在这里插入图片描述


  • 先对前6种进行介绍,剩余的我们后面讲
分类功能说明
string( )构造空的string类对象,即空字符串
string( const char* s)用常量字符串来构造string类对象
string(const string& s)调用拷贝构造函数来初始化string对象
string(const string& str, size_t pos, size_t len)从给定的string对象str的pos位置开始,拷贝构造len个字符给string新创建的对象
string (const char* s,size_t n)用常量字符串s的n个字符构造string对象
string(size_t n, char c)对string类的对象构造n个c字符

在这里插入图片描述


  • 遍历字符串

在这里插入图片描述


在这里插入图片描述


  • 第七种string对象的构造方式

在这里插入图片描述


在这里插入图片描述


  • string类的成员函数begin( )和end( )分别返回指针指向对应字符的位置,不过这是底层的实现方法,在C++他们被封装成了一个迭代器,用来访问string类的对象

3.5 string的析构和赋值运算符重载

在这里插入图片描述


在这里插入图片描述


3.6 string类对象的容量操作

在这里插入图片描述


函数名功能说明
size(重点)返回字符串有效字符长度
length返回字符串有效字符长度
capacity返回总空间大小
empty(重点)判断字符串是否为空,是就返回true,否则返回false
clear(重点)清空有效字符
reserve(重点)为字符串预留空间,防止插入数据时空间不足
resize(重点)将有效字符的个数改成n个,多出的用字符c填补
max_size(基本不用)返回容器可以容纳的最大的元素个数
shrink_to_fit(慎用)减少容器的容量以适应其当前大小,并销毁超出当前大小的所有元素

在这里插入图片描述


  • max_size也不常用,这里仅做了解,它表示容器可以容纳多大的空间,可以看出,它的数值很大,但是底层实现原理为数组,开不出那么大的连续空间

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


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

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

相关文章

uniapp扭蛋机组件

做了一个uniapp的扭蛋机组件,可以前往下载地址下载 支持vue2、3、h5页面微信小程序,其余小程序未测试 示例图片

MyBatis的工作流程是怎样的?

大家好,我是锋哥。今天分享关于【MyBatis的工作流程是怎样的?】面试题。希望对大家有帮助; MyBatis的工作流程是怎样的? MyBatis 的工作流程可以分为几个主要步骤:从配置、映射到执行 SQL,最终获取数据库结…

MYSQL PARTITIONING分区操作和性能测试

PARTITION OR NOT PARTITION IN MYSQl Bill Karwin says “In most circumstances, you’re better off using indexes instead of partitioning as your main method of query optimization.” According to RICK JAMES: “It is so tempting to believe that PARTITIONing wi…

[软件工程]九.可依赖系统(Dependable Systems)

9.1什么是系统的可靠性(reliability) 系统的可靠性反映了用户对系统的信任程度。它反映了用户对其能够按照预期运行且正常使用中不会失效的信心程度。 9.2什么是可依赖性(dependablity)的目的 其目的是覆盖系统的可用性&#x…

vue3中使用watchEffect和watch函数时应当防止内存泄漏

官方文档:https://cn.vuejs.org/api/reactivity-core.html#watcheffect 也就是说当使用他们两个时候,使用完成之后要及时停止他们,防止一直在运行,停止他们之后,也可以再次开启。 watchEffect()​ 立即运行一个函数…

Wwise SoundBanks内存优化

1.更换音频格式为Vorbis 2.停用多余的音频,如Random Container的随机脚步声数量降为2个 3.背景音乐勾选“Stream”。这样就让音频从硬盘流送到Wwise,而不是保存在内存当中,也就节省了内存 4.设置最大发声数Max Voice Instances 5.设置音频…

Windows宝塔面板下IIS环境如何部署SSL证书?

Windows宝塔面板下IIS环境如何部署SSL证书? 平时服务器linux宝塔用的较多,所以linux系统宝塔,如何部署SSL证书还是比较熟悉,今天遇到一个windows的部署SSL证书,还是头一次,所以记录一下,以防忘…

【计算机视觉】图像的几何变换

最常见的几何变换有仿射变换和单应性变换两种,最常用的仿射变换有缩放、翻转、旋转、平移。 1. 缩放 将图像放大或缩小会得到新的图像,但是多出的像素点如何实现----插值 1.1 插值方法 最近邻插值 双线性插值 cv2.resize() 是 OpenCV 中用于调整图像…

深入浅出 Go 语言:数组与切片

深入浅出 Go 语言:数组与切片 引言 在 Go 语言中,数组和切片是两种非常重要的数据结构,用于存储和操作一组相同类型的元素。虽然它们看起来相似,但在使用上有很大的区别。理解数组和切片的区别以及如何正确使用它们,…

基于超级电容和电池的新能源汽车能量管理系统simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 超级电容特性 4.2 电池特性 5.完整工程文件 1.课题概述 基于超级电容和电池的新能源汽车能量管理系统simulink建模与仿真。分析不同车速对应的电池,超级电容充放电变化情况。 2.系统仿…

y3编辑器文档3:物体编辑器

文章目录 一、物体编辑器简介1.1 界面介绍1.2 复用(导入导出)1.3 收藏夹(项目资源管理)1.4 对象池二、单位2.1 数据设置2.2 表现设置2.3 单位势力和掉率设置2.4 技能添加和技能参数修改2.5 商店2.5.1 商店属性设置2.5.2 商店物品设置三、装饰物3.1 属性编辑3.2 碰撞体积四、…

「嵌入式系统设计与实现」书评:学习一个STM32的案例

本文最早发表于电子发烧友论坛:【新提醒】【「嵌入式系统设计与实现」阅读体验】 学习一个STM32的案例 - 发烧友官方/活动 - 电子技术论坛 - 广受欢迎的专业电子论坛!https://bbs.elecfans.com/jishu_2467617_1_1.html 感谢电子发烧友论坛和电子工业出版社的赠书。 …

Qt Designer Ui设计 功能增加

效果展示 输入密码,密码错误,弹出提示 密码正确,弹出提示并且关闭原窗口 代码(只提供重要关键主代码)lxh_log.py代码: import sysfrom PySide6.QtWidgets import QApplication, QWidget, QPushButtonfrom …

RT Thread Studio新建STM32F407IG工程文件编译提示错误

编译提示错误 原因: RT 源码使用4.0.3的话,请用STM32F4支持包的0.2.2版本,就不会出错了。 如果支持包用0.2.3版本的话,需要用RT内核4.1.0版本。0.2.3 版本更新了一些针对内核4.1.0的驱动代码,这几个定义都是4.1.0里的。

智能制造标准体系建设指南

一、智能制造系统架构总览 智能制造作为当今制造业转型升级的核心,深度整合了新一代信息技术与传统制造工艺,催生出一个横跨产品全生命周期、纵贯多层级组织架构,并彰显多元智能特性的复杂系统。这一架构从生命周期、系统层级、智能特征三个…

DApp开发与APP开发的五大区别

随着比特币与区块链技术的不断发展,DApp应用会逐渐成为主流。与APPAPP相比,DApp有许多不同之处,尤其是在架构、数据存储、用户隐私等方面。本文将通过五大关键点,深入探讨DApp开发与APP开发之间的主要区别。 1. 后端架构&#xff…

XSS(DOM)-HIGH错误总结

HIGH就不从简单的开始。 我们直接闭合HTML标签绕过 ></option></select><img srcx:alert(alt) οnerrοreval(src) altxss> 没有变化 这里应该是后端的问题&#xff0c;试试锚点注入 English#<script>alert(xss)</script> 这里不知道什么…

Mitel MiCollab 企业协作平台 任意文件读取漏洞复现(CVE-2024-41713)

0x01 产品简介 Mitel MiCollab是加拿大Mitel(敏迪)公司推出的一款企业级协作平台,旨在为企业提供统一、高效、安全的通信与协作解决方案。通过该平台,员工可以在任何时间、任何地点,使用任何设备,实现即时通信、语音通话、视频会议、文件共享等功能,从而提升工作效率和…

【PostgreSQL系列】列类型从整数转换为 UUID

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…