string 类对象的常见容量操作
函数名称 | 功能 |
size | 返回字符串有效字符长度 |
length | 返回字符串有效字符长度 |
capacity | 返回空间总大小 |
clear | 清空有效字符 |
empty | 检测字符串是否为空串,是返回true,否则返回false |
reserve | 对容量进行改变 |
resize | 扩容+初始化 |
size和length
文档解释:
代码语法:
size_t length() const;
size_t size() const;
//size_t 是一个无符号整数类型
代码运行画图解释:
结论:size和length的用法是完全一样的
reserve
文档解释:
- 当n大于对象当前的capacity时,将capacity扩大到n或大于n。
- 当n小于对象当前的capacity时,系统会考虑优化,当有数据时什么也不做。没有数据的话就会进行缩容
代码语法:
void reserve (size_t n = 0);
//n:字符串的计划长度,结果字符串的容量可能等于或大于n。
//当n大于对象当前的capacity时,将capacity扩大到n或大于n。
//当n小于对象当前的capacity时,系统会考虑优化,当有数据时什么也不做。没有数据的话就会进行缩容
代码运行画图解释:
但是在Linux系统下,当n>capacity时,是开多少给多少容量
作用:当知道自己需要多少空间的时候,可以提前开好空间,避免不断的增容,减少代价。
resize
文档解释:
- 当n大于对象当前的size时,将size扩大到n,扩大的字符为c,若c未给出,则默认为’\0’。
- 当n小于对象当前的size时,将size缩小到n。
代码语法:
void resize (size_t n);
void resize (size_t n, char c);
//n:表示新字符串的长度,以字符数表示。size_t是一个无符号整数类型
//c:用于填充添加到字符串中的新字符空间的字符
代码运行画图解释:
n>当前字符串的长度的情况:
自定义初始化的情况:
n<当前字符串的长度的情况:
拓展:缩容在编译器中还是挺麻烦的,当进行缩容的时候,会先开一块新的空间,然后把原来的数据拷贝进去,再把原来的空间给释放掉。所以编译器一般不会进行capacity缩容的