string类的由来
C语言中,字符串是以 '\0‘ 结尾的一些字符的集合,为例操作方便,C标准库中提供了一些str 系列的库函数,但是这些库函数与字符串是分开的,不太符合OOP(封装、继承和多态)的思想,而且底层空间需要用户自己管理,稍不留神可能会导致越界访问。
因此,在C++中,为了改变这种情况,大佬们创造了string类。
C++中对于string的定义为:typedef basic_string string; 也就是说C++中的string类是一个泛型类,由模板而实例化的一个标准类,本质上不是一个标准数据类型。
在使用string类时,必须包含头文件以及 using namespace std。
string类的常见接口
string类对象的常见构造
上面图片是在cplusplus上面的string类对象的常见构造。我们实现一下。
string类对象的容量操作
size length capacity emply clear
这里主要介绍 size(重点) length capacity empty(重点) clear(重点) reserve(重点) resize(重点)
reserve和resize
接下来,我们看reserve和resize。
reserve是为字符串预留空间。
reserve是为string预留空间,不改变有效元素个数,当reserve的参数小于底层空间大小时,reserve不会改变容量。
resize是将有效字符的个数改成n个,多出的空间用字符填充。
resize在改变元素个数时,如果元素个数增多,可能会改变地城容量大小,如果元素个数减小,底层总空间不变。
string类对象的访问及遍历操作
主要是下面几个:
其中,除了 [] 的运算符重载,剩下的都与迭代器有关。
operate[]
我们先看 [] :
左边是用我们平常的for循环和重载的 [] 来遍历的sl,而右边是范围for遍历的sl。范围for我们后面也还会提到,这里先介绍一下。
begin end rbegin rend
我们重点介绍 begin end rbegin rend
这里先介绍下迭代器。
我们看到上面图片出现了 iterator ,iterator就是迭代器。我们现阶段可以把迭代器理解成类似于指针的东西。
begin和end
看看上面的代码,是不是感觉迭代器和指针有点相似呢。
rbegin和rend
如果我们要从后面到前面,也就是逆着遍历,我们就要用rbegin和rend了,然后迭代器也要换成
reverse_iterator了。注意分别reverse和reserve。
string类对象的修改操作
主要就是上面的几个了。可以将它们分为两类。
一类是: operator+=、append和push_back
还有一类就是:c_str、find、rfind和substr
operator+=、append和push_back
这几个操作符是在string类后面尾插。push_back是尾插字符,append和operator+=都是后面插入字符串。
c_str、find、rfind和substr
c_str是返回C格式字符。
find是从字符串pos开始往后找字符c,然后返回在字符串中的位置。
refind是从字符串pos开始往前找字符c,然后返回在字符串中的位置。
substr是从pos位置开始截取n个字符,然后将其返回。
fopen的第一个参数是const char*类型的,而filename是string类的,所以用c_str返回c格式字符就可以作为fopen的参数了。
结尾
这个就是string类的主要内容了,如果遇到一些其他接口,可以在cplusplus上面查找用法。拜拜