string的库函数reserve、resize

系列文章

http://t.csdnimg.cn/u80hL


一、reserve——请求容量的变化

  1. 改变对象的capacity——他会请求开辟和缩小对象所占的空间,reserve只能操作对象未使用的空间;
  2. 其存在意义为:因为开辟空间的操作所消耗的资源太多了,所以在知道需要多少空间的前提下请求提前一次性开辟一个确定够用的空间,避免反复开空间;
  3. reserve请求实际开辟的空间大小会大于或等于我们给出的数值,具体值根据不同的编译器有所不同,如g++会给等于数值大小的空间、visual会给数值1.5倍大小的空间;
  4. 如果对象已经使用了空间,而我们使用reserve请求变化的空间值小于对象使用的空间,会有两种情况:
    情况1:请求的新空间大于等于对象已经使用的空间大小,此时编译器会在保留对象已经使用的空间不受干扰的情况下,去释放对象没有使用的空间;
    情况2:请求的新空间小于对象已经使用的空间大小,此时编译器会将空间缩小到刚好存储对象已经使用的空间大小;

如代码所示,请求开辟较大的空间、请求缩小空间:

#include<iostream>
using namespace std;
int main() 
{
   
	//reserve
	string s1;	//定义一个对象
	s1 = "0123456789";
	cout << s1 << endl;
	cout << s1.size() << endl;
	cout << s1.capacity() << endl;
	cout << endl;

	s1.reserve(30);	//给这个对象请求更大的空间使用权
	cout << s1 << endl;
	cout << s1.size() << endl;
	cout << s1.capacity() << endl;
	cout << endl;

	s1.reserve(15);	//请求给对象更小的使用权
	cout << s1 << endl;
	cout << s1.size() << endl;
	cout << s1.capacity() << endl;
	return 0;
}

在这里插入图片描述

ps. 在实践时我发现,编译器会优化我们的 reserve()请求,编译器会根据具体的情况决定要不要执行我们的开拓和缩小请求。

二、resize——操作对象使用的空间

  1. 通过resize我们可以直接操作对象使用的空间,这种操作是强硬的;
  2. resize的操作会有3种情况:

情况1:resize的空间大于原size和capacity,此时原size会被扩大到新的size大小,那些没有实质内容的空间可以指定一种字符去填充,如果没有指定则会自动用’\0’填充,而capacity会自动扩容直到可以包括下新的size;

情况2:resize的空间大于原size而小于capacity,此时原size会被扩大到新的size大小,那些没有实质内容的空间可以指定一种字符去填充,如果没有指定则会自动用’\0’填充;

情况3:resize的空间小于原size,此时编译器会舍去不在新size存储空间里面的信息,而capacity不做改变;
如下代码,使用resize()扩大和缩小对象空间使用。

void test2()
{
   
	string s2;	//定义一个对象
	s2 = "0123456789";
	cout << s2 << endl;
	cout << s2.size() << endl;
	cout << s2.capacity() << endl;
	cout << endl;

	s2.resize(20);
	cout << s2 << endl;
	cout << s2.size() << endl;
	cout << s2.capacity() << endl;
	cout << endl;

	s2.resize(5);
	cout << s2 << endl;
	cout << s2.size() << endl;
	cout << s2.capacity() << endl;
	cout << endl;
}

在这里插入图片描述

相关推荐

  1. Mysql函数

    2023-12-23 21:02:03       41 阅读
  2. 函数模拟实现

    2023-12-23 21:02:03       43 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-23 21:02:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-23 21:02:03       106 阅读
  3. 在Django里面运行非项目文件

    2023-12-23 21:02:03       87 阅读
  4. Python语言-面向对象

    2023-12-23 21:02:03       96 阅读

热门阅读

  1. 【Python函数】functools.reduce()函数的用法

    2023-12-23 21:02:03       57 阅读
  2. python的装饰器、with、上下文管理器等简单的记录

    2023-12-23 21:02:03       60 阅读
  3. 我的创作纪念日

    2023-12-23 21:02:03       67 阅读
  4. 数据库概述

    2023-12-23 21:02:03       66 阅读
  5. C# 设置文本框只能输入数字和小数点

    2023-12-23 21:02:03       51 阅读
  6. 【MySQL】sum 函数和 count 函数的相同作用

    2023-12-23 21:02:03       66 阅读
  7. Python生成器

    2023-12-23 21:02:03       56 阅读
  8. Mysql数据库基础知识1

    2023-12-23 21:02:03       42 阅读
  9. 【深度解析C++之初始化列表】

    2023-12-23 21:02:03       46 阅读