【C++】string类对象的容量操作
📌string类对象的容量操作
string类对象容量相关操作函数共有9个,如下:
编辑
接下来我们演示学习几种常见的string类对象的容量操作函数:
函数名称 |
功能说明 |
|
size |
返回字符串有效字符长度 |
|
length |
返回字符串有效字符长度 |
|
capacity |
返回空间总大小 |
|
empty |
检测字符串释放为空串,是返回true,否则返回false |
|
clear |
清空有效字符 |
|
reserve |
为字符串预留空间 |
|
resize |
将有效字符的个数改成n个,多出的空间用字符c填充 |
🎏size()函数
size()函数定义:
编辑
使用size()函数获取字符串有效字符长度:
int main()
{
string st1("Hello world");
cout << st1.size() << endl;
return 0;
}
size()函数效果如下:编辑
🎏length()函数
length()函数定义:
编辑
使用length()函数获取字符串有效字符长度
int main()
{
string st1("Hello world");
cout << st1.length() << endl;
return 0;
}
length()函数效果如下:编辑
🎏capacity()函数
capacity()函数定义:
编辑
使用cipacity()函数获取string类对象当前存储空间总大小:
int main()
{
string st1("Hello world");
cout << st1.size() << endl;
cout << st1.capacity() << endl;
return 0;
}
capacity()函数效果如下:
编辑
关于capacity:
• 不同的编译器底层实现的扩容机制不同,vs初始长度为16,第一次扩容2倍,剩余每次扩容1.5倍;Linux初始长度按初始化的字符串来确定,之后每次扩容2倍
🎏empyt()函数
empty()函数定义:
编辑
使用empty()函数判断字符串是否为空串:
int main()
{
string st1("Hello world");
string st2;
cout << st1.empty() << endl;
cout << st2.empty() << endl;
return 0;
}
empty()函数效果如下:编辑
🎏clear()函数
clear()函数定义:
编辑
使用clear()函数清空字符串:
int main()
{
string st1("Hello world");
cout << st1.empty() << endl;
st1.clear();
cout << st1.empty() << endl;
return 0;
}
clear()函数效果如下:
编辑
clear对size和capacity的影响:
int main()
{
string st1("Hello world");
cout << st1.size() << endl;
cout << st1.capacity() << endl;
st1.clear();
cout << st1.size() << endl;
cout << st1.capacity() << endl;
return 0;
}
结论是:
一般而言,clear的改变会让size变成0,但不会影响capacity,因为要缩小容量,就需要重新再开辟空间,代价消耗太大,因此一般不会轻易改变capacity的大小:
编辑
🎏reserve()函数
reserve()函数定义:
编辑
使用reserve()函数更改类对象容量:
int main()
{
string st1;
cout << st1.capacity() << endl;
st1.reserve(100);
cout << st1.capacity() << endl;
string st2("Hello this world");
cout << st2.capacity() << endl;
st2.reserve(100);
cout << st2.capacity() << endl;
return 0;
}
reserve()函数效果如下:编辑
🎏resize()函数
resize()函数定义:
编辑
使用resize()函数调整字符串大小:
int main()
{
string st1("Hello this world");
cout << "st1:" << endl << st1 << endl;
cout << st1.size() << endl;
cout << st1.capacity() << endl;
st1.reserve(100);
cout << st1 << endl;
cout << st1.size() << endl;
cout << st1.capacity() << endl << endl ;
string st2("Hello this world");
cout << "st2:" << endl << st2 << endl;
cout << st2.size() << endl;
cout << st2.capacity() << endl;
st2.resize(100);
cout << st2 << endl;
cout << st2.size() << endl;
cout << st2.capacity() << endl;
return 0;
}
resize()函数效果如下:
编辑
resize在调整容量时也可以用指定的字符来填充,如:
编辑
注意:
1. size()与length()方法底层实现原理完全相同,引入size()的原因是为了与其他容器的接口保持一致,一般情况下基本都是用size()。
2. clear()只是将string中有效字符清空,不改变底层空间大小。
3. resize(size_t n) 与 resize(size_t n, char c)都是将字符串中有效字符个数改变到n个,不同的是当字符个数增多时:resize(n)用0来填充多出的元素空间,resize(size_t n, char c)用字符c来填充多出的元素空间。注意:resize在改变元素个数时,如果是将元素个数增多,可能会改变底层容量的大小,如果是将元素个数减少,底层空间总大小不变。
4. reserve(size_t res_arg=0):为string预留空间,不改变有效元素个数,当reserve的参数小于string的底层空间总大小时,reserver不会改变容量大小。
- 点赞
- 收藏
- 关注作者
评论(0)