欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 锐评 > 【C++初阶】第7课—标准模版库STL(string_1)

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

2025/11/11 13:06:41 来源:https://blog.csdn.net/weixin_70620792/article/details/144172740  浏览:    关键词:【C++初阶】第7课—标准模版库STL(string_1)

文章目录

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

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com