string
string是表示字符串的字符串类, 该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作string的常规操作。
使用时必须添加#include头文件。
一.string类常用接口说明
(一)string类对象的常见结构
(二) string类对象的容量操作
注意:
1.size()与length()方法底层实现原理完全相同,引入size()的原因是为了与其他容器的接口保持一致,一般情况下基本都是用size()。
2. clear()只是将string中有效字符清空,不改变底层空间大小(不改变capacity)。
3.扩容
(1)扩容机制:
最开始扩2倍,之后1.5倍。
(2)reserve()
reserve手动扩容,改变的是capacity,知道需要多少数据,提前开好空间,提高效率。若手动扩容的量足够多了,则不会自动扩容。
(2)resize()
1删除
2插入
3*扩容+插入
(三)string类对象的访问及遍历操作
1.operator[](类似于数组遍历):
2.用迭代器(比较普遍的一种用法)
(逆序打印)
(可以直接对string对象进行修改)
3.for(auto)
(四)string类对象的修改操作
1.(后面加)
append
string s1("hello");
s1.append(3, 'x');
cout << s1 << endl;
string s2(" apple ");
s1.append(s2);
cout << s1 << endl;
s1.append(s2.begin(), s2.end());
cout << s1 << endl;
s1.append(++s2.begin(), s2.end());
cout << s1 << endl;
+=
push_back
2.(往前加)
insert
3.replace
npos是string中一个静态成员,为-1,意思是直到结尾
4.assign直接覆盖
5.erase
6.swap(替换)
最后:
string开空间会开在堆上,在string(可看作字符串顺序表)实现的底层,private中会有char buff[16],超过16长度时采用char* _str,那是因为char buff[]在栈上开空间快,并且出作用域会销毁。