【C++】string类对象的容量操作

举报
修修修也 发表于 2024/04/22 20:48:43 2024/04/22
【摘要】  📌string类对象的容量操作        string类对象容量相关操作函数共有9个,如下:​编辑            接下来我们演示学习几种常见的string类对象的容量操作函数:函数名称功能说明size返回字符串有效字符长度length返回字符串有效字符长度capacity返回空间总大小empty检测字符串释放为空串,是返回true,否则返回falseclear清空有效字符re...

 📌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不会改变容量大小。



【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。