string类及学习使用文档
【写在前面】
到这里我们就要学会能自己能看文档了,因为就这个 string 类来说就有一百多个接口函数,那肯定记不住呀,我们平时用的大概就二十个,一般我们都是学习它比较常用的,其它的大概熟悉它们有哪些功能,真要用到时再去查文档。可以看到其实 string 就是一个管理字符数组的顺序表,因为字符数组的使用广泛,C++ 就专门给了一个 string 类,由于编码原因,它写的是一个模板。针对 string,一般情况它有三个成员 —— char* _str、size_t _size、size_t _capacity,我们在下面模拟实现 string 时就会看到,其次在学习深浅拷贝时我们只用 char* _str。
C++ 的文档库严格来说有两个:注意前者并不是 C++ 的官网文档,后者才是。这里我们对于官方文档就作为参考,因为它比较乱,平时就用 cplusplus 也够了。
此外对于类和对象还有一个深浅拷贝的知识我们将会再这里补充。
一、为什么学习string类
💦 C语言中的字符串
C 语言中,字符串是以 ‘\0’ 结尾的一些字符的集合,为了操作方便,C 标准库中提供了一些 str 系列的库函数,
但是这些库函数与字符串是分离开的,不太符合 OOP 的思想,而且底层空间需要用户自己管理,稍不留神可
能还会越界访问。
💦 两个面试题(暂不讲解)
在 OJ 中,有关字符串的题目基本以 string 类的形式出现,而且在常规工作中,为了简单、方便、快捷,基本都使用 string 类,很少有人去使用 C 库中的字符串操作函数。
二、标准库中的string类
💦 string类(了解)
- 字符串是表示字符序列的类。
- 标准的字符串类提供了对此类对象的支持,其接口类似于标准字符容器的接口,但添加了专门用于操作单字节字符字符串的设计特性。
- string 类是使用 char(即作为它的字符类型,使用它的默认 char_traits 和分配器类型 (关于模板的更多信息,请参阅 basic_string)。
- string 类是 basic_string 模板类的一个实例,它使用 char 来实例化 basic_string 模板类,并用 char_traits 和 allocator 作为 basic_string 的默认参数(根于更多的模板信息请参考 basic_string)。
- 注意,这个类独立于所使用的编码来处理字节:如果用来处理多字节或变长字符(如 UTF-8) 的序列,这个类的所有成员(如长度或大小)以及它的迭代器,将仍然按照字节(而不是实际编码的字符)来操作。
总结:
- string 是表示字符串的字符串类。
- 该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作 string 的常规操作。
- string 在底层实际是:basic_string 模板类的别名,typedef basic_string<char, char_traits, allocator> string;。
- 不能操作多字节或者变长字符的序列。
- 在使用 string 类时,必须包含 string 头文件以及 using namespace std;。
#include<string>
#include<iostream>
using namespace std;
int main()
{
cout << sizeof(char) << endl;
cout << sizeof(wchar_t) << endl;
char arr1[] = "hello bit";
char arr2[] = "比特";
return 0;
}
📝说明
对于字符,C++ 里提出了两个类型,现阶段接触的是第一个。
可以看到结果一个是 1 和 2,这个东西与编码有关系。
编码 ❓
计算机中存储只有二进制 0 和 1,如何去表示文字呢 ???
这时就建立出对应的编码表:
-
ASCII > 支持英文
1Byte = 8Bit,0 - 255 ASCII 编码表就是对 256 个值建立一个对应的表示值
-
GBK > 我国制定的,常用于 windows 下
早期 windows 为了打入中国市场,就使用这个编码 -
utf-8 > 通用,兼容 ASCII,常用于 Linux 下
世界各国都开始使用计算机了,而早期计算机中只能表示英文,不能表示其它国家的文字,所以需要建立自己的编码表,但各自搞各自的就非常乱,所以就出现了 utf-8,早期是 UniCode
所以据不完全统计汉字大约有十万个左右,所以我们这里用 2 个字节,大概表示 6 万种状态
- 点赞
- 收藏
- 关注作者
评论(0)