滴水恩情 发表于 2024-12-9 02:36:56

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

1. 什么是STL

   

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

https://i-blog.csdnimg.cn/direct/e89a1e3217784034895ecd27f2faba5a.png
   

[*]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修饰的变量,它的范例是由操作符右边的对象推导出来的
https://i-blog.csdnimg.cn/direct/f018867e4f9549268b4307c9cc90f21f.png
   

[*]一行声明多个变量时,这些变量的范例必须相同,否则编译器会报错,编译器只对第一个范例推导,然后用退出来的范例定义其他变量
[*]auto不能作为函数的参数,但是可以做返回值
[*]auto不能直接用来声明数组
https://i-blog.csdnimg.cn/direct/3b1817e0b4a04db694736f39296d3e12.png
https://i-blog.csdnimg.cn/direct/47118d00f3c843cfb167adb0d1988eff.png
   

[*]上面简朴先容了auto的用法,它是根据已知对象的范例来推导新创建的对象,但是上面的场景一样平常不消auto,按照之前的逻辑写就没有任何问题,为何还要多此一举呢?但是有些场景下,auto用起来就比较爽
https://i-blog.csdnimg.cn/direct/8a55b5500d5042a0beecdda7c34b5657.png
   

[*]这是一个容器,可以看出dict这个对象的范例就挺长,map就是一个容器,这个我们以后讲,这里先见地一下auto的使用场景
3.2 范围for

   

[*]对于一个有范围的集合,步伐员本身来说明循环的范围有点多余,还容易出错,因此C++11引入了范围for的概念,它从冒号:开始分为两部门,冒号前面接迭代的变量,最后+迭代的范围
[*]范围for自动迭代,自动取数据,自动判断结束
[*]范围for可以用到数组和容器对象上的遍历
[*]范围for的底层很简朴,容器遍历就是替换为迭代器,这个我们以后会讲
https://i-blog.csdnimg.cn/direct/c1702c1aea064706bdfc7da96534fb84.png
   

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

[*]range可以是数组、列表、向量大概任何可以生成迭代器的范围
https://i-blog.csdnimg.cn/direct/a4bc854157904101a412a132ef22b626.png
https://i-blog.csdnimg.cn/direct/6b30ab294f0242e78754d34bdc9e355b.png
3.3 string类的范例

   

[*]C++string类中引入了几个char范例,简朴了解下
[*]wchar_t是宽字节范例,大小为2个字节
[*]char16_t为2个字节,char32_t为4个字节大小
https://i-blog.csdnimg.cn/direct/9bd8db599ae54861b48a23a56f94e942.png
3.4 string类的常用接口(string类对象的常见构造)

https://i-blog.csdnimg.cn/direct/220d70393d38488b863d864f14f25ab3.png
   

[*]先对前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字符 https://i-blog.csdnimg.cn/direct/1ea2d3e1dc1841c98a267448558cf3d9.png
   

[*]遍历字符串
https://i-blog.csdnimg.cn/direct/bb0f0402cc534d7a803ad3aba1d284cd.png
https://i-blog.csdnimg.cn/direct/2845f29234a2498c9bacd8d2bbab856b.png
   

[*]第七种string对象的构造方式
https://i-blog.csdnimg.cn/direct/874c58c010474dff8e5bbc02c6f7bde3.png
https://i-blog.csdnimg.cn/direct/c88c598f92fd4de68bf6191d22ec8475.png
   

[*]string类的成员函数begin( )和end( )分别返回指针指向对应字符的位置,不外这是底层的实现方法,在C++他们被封装成了一个迭代器,用来访问string类的对象
3.5 string的析构和赋值运算符重载

https://i-blog.csdnimg.cn/direct/307265f0c8714d6f87157f565ccfe09a.png
https://i-blog.csdnimg.cn/direct/b9ac94afe8834c1b8e495dd4a6ca89b1.png
3.6 string类对象的容量操作

https://i-blog.csdnimg.cn/direct/3901d7c132bb49f88f444fe307fb449e.png
函数名功能说明size(重点)返回字符串有用字符长度length返回字符串有用字符长度capacity返回总空间大小empty(重点)判断字符串是否为空,是就返回true,否则返回falseclear(重点)清空有用字符reserve(重点)为字符串预留空间,防止插入数据时空间不敷resize(重点)将有用字符的个数改成n个,多出的用字符c填补max_size(基本不消)返回容器可以容纳的最大的元素个数shrink_to_fit(慎用)减少容器的容量以顺应其当前大小,并销毁超出当前大小的全部元素 https://i-blog.csdnimg.cn/direct/275c541814a84db3ab7095a8f0599cf3.png
   

[*]max_size也不常用,这里仅做了解,它表现容器可以容纳多大的空间,可以看出,它的数值很大,但是底层实现原理为数组,开不出那么大的连续空间
https://i-blog.csdnimg.cn/direct/ab60a09890e74be1ba08d48874211493.png
https://i-blog.csdnimg.cn/direct/f64fbb86355e4028832ec7e9a449266b.png
https://i-blog.csdnimg.cn/direct/99bbf6f3e86d430ea9e521b24ebe8487.png
https://i-blog.csdnimg.cn/direct/b76beb0250b047108f105e711d9d2864.png
https://i-blog.csdnimg.cn/direct/e267dcac8c2f4fac9c41a19b7531803a.png
https://i-blog.csdnimg.cn/direct/ab65cb381a0d4fd5ad95455ae5cd4fda.png

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 【C++初阶】第7课—尺度模版库STL(string_1)