【C++详解】STL-string各种接口如何使用保姆级攻略
文章目录
- 一、string介绍
- 二、string使用
- 构造函数
- 析构函数
- 赋值运算符重载
- string的遍历+修改方法
- 1、下标+[]
- 2、迭代器
- 3、范围for
- 迭代器使用详解
- const迭代器
- 反向迭代器(reverse)
- Capacity(容量相关)
- size/length
- max_size
- capacity
- clear/empty
- shrink_to_fit(缩容)
- reserve(扩容)
- resize
- element access(数据访问)
- operator[]/at
- back/front
- Modifiers(修改相关)
- append(追加)/operator+=
- assign(赋值)
- insert/erase
- repalce
- String operations
- c_str/data
- copy
- substr
- find/rfind
- find_first_of/find_last_of
- 非成员函数
- 关系运算符
- operator+
- getline
- 三、总结
一、string介绍
在学习string之前我们要先了解string其实诞生的比STL早,所以从发展历史角度来看你它应该归于标准库,但是从广义来看它又应归于STL,因为它也是数据结构,它也有STL的各种通用接口。
从这里我们可以看到我们要学习的string是属于C++标准库的类,并且是经过类模板实例化的具体类型,本质上可以看作的管理char字符的顺序表,也可以简单理解成字符串。
注意:要使用string需要using namespace std和包string头文件。
二、string使用
构造函数
string的构造函数很多,这里我们介绍最常见的几种。
1、默认构造 string()
string s1;
2、用常量字符串构造string(const char* s)
string s2("good moring");
3、拷贝构造 string(const string& str)
string s3(s2);
4、子串构造 string(const string& str, size_t pos, size_t length = npos)
它的功能是用string的一部分用来拷贝构造,该部分是从pos这个位置到length位置,其中length给了一个缺省参数npos(缺省参数只能用常量,全局变量或者静态变量),它是string的静态成员变量,它的值是整型的最大值,因为string一般不会有这么长,所以用这个值就是为了让string有多少拷贝多少,直到结尾。
string s4(s3, 1, 7);
5、拷贝前n个字符构造 string(const char* str, size_t n)
const char* str = "hello world"; string s5(str, 7);
6、用n个c字符构造 string(size_t n, char c)
string s6(100, 'x');
析构函数
因为string没有动态开辟空间的成员变量,所以就不需要回收资源,调用它的默认析构函数就好了,所以析构我们就不展开讨论了。
赋值运算符重载
string s1("good moring"); string s2; s2 = s1; s2 = "wusaqi"; s2 = 'x';
string的遍历+修改方法
平时我们使用string这个类,遍历和修改操作是不可避免的,接下来小编会介绍三种方法来实现。
1、下标+[]
我们首先来认识一下string里的operator[]函数,它可以返回string的第pos位置的字符,如果越界了还会报错,并且返回的是引用,代表返回后你还可以修改它。
我们首先可以看到它重载了两个函数,一个参数(也就是this指针)没被const修饰,返回值为char&,一个参数被const修饰,返回值为const char&,但是我们一般只用实现const版本的就行了,因为普通对象也可以调用const,可这里为什么要实现两种呢?因为这样可以让对象使用到最匹配它的函数,因为编译器会去找最匹配对象的函数,不然普通对象去调用后返回的对象就变成不能修改了,违背了我们本意。
string s1("good morning"); for (int i = 0; i