string的库函数reserve、resize

系列文章

http://t.csdnimg.cn/u80hL


目录

  • 系列文章
    • @[TOC](目录)
  • 一、reserve——请求容量的变化
  • 二、resize——操作对象使用的空间

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

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

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

#include<iostream>
using namespace std;
int main() 
{//reservestring 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;
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/240780.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

单例模式实现

⭐ 作者&#xff1a;小胡_不糊涂 &#x1f331; 作者主页&#xff1a;小胡_不糊涂的个人主页 &#x1f4c0; 收录专栏&#xff1a;JavaEE &#x1f496; 持续更文&#xff0c;关注博主少走弯路&#xff0c;谢谢大家支持 &#x1f496; 单例模式 1. 什么是单例模式2. 饿汉模式3.…

C语言易错知识点九(指针(part three))

❀❀❀ 文章由不准备秃的大伟原创 ❀❀❀ ♪♪♪ 若有转载&#xff0c;请联系博主哦~ ♪♪♪ ❤❤❤ 致力学好编程的宝藏博主&#xff0c;代码兴国&#xff01;❤❤❤ 许久不见&#xff0c;甚是想念&#xff0c;本大忙人已经很久没有更新博客了&#xff0c;我想大概我的粉丝们早…

Linux的/proc/self/学习

文章目录 /proc目录/proc/self的使用 在做SSTI模板注入的CTF题中&#xff0c;发现有师傅提到可以用/proc/self这个目录获取flag&#xff0c;所以也来学习一波主要参考. (我才知道&#x1f601;&#x1f601;&#x1f601;)可以通过/proc/$pid/来获取指定进程的信息&#xff0c…

Kioptrix-3

靶场下载地址 https://download.vulnhub.com/kioptrix/KVM3.rar 信息收集 # Nmap 7.94 scan initiated Thu Dec 21 21:52:25 2023 as: nmap -sn -oN live.nmap 192.168.1.0/24 Nmap scan report for 192.168.1.1 (192.168.1.1) Host is up (0.00048s latency). MAC Address:…

AI绘画中VAE压缩图像

介绍 在Stable Diffusion中,所有的去噪和加噪过程并非在图像空间直接进行,而是通过VAE模块将图像编码到一个低维空间。 这个低维空间的“分辨率”低于原始图像空间,有利于快速地完成加噪和去噪过程。 最后再将编码空间中的噪声表示解码恢复为图像空间,完成去噪或加噪操作。 …

【Element】el-table 使用 el-table-infinite-scroll 插件实现滚动加载

虽然 el 官方提供了 Infinite Scroll 无限滚动 组件 但是却不支持 el-table 组件&#xff0c;这就很难受了&#xff0c;还好已经有大佬写好了插件&#xff0c;并且支持 element-plus/infinite-scroll 组件的所有选项。 el-table-infinite-scroll el-table-infinite-scroll 看…

【数据结构入门精讲 | 第十二篇】考研408、公司面试树专项练习(一)

在上一篇文章中我们介绍了树的知识点&#xff0c;在这一篇中我们将进行树的专项练习。 目录 判断题选择题填空题二叉树的宽度R6-1 是否二叉搜索树 方法介绍&#xff1a; 已知中序及后序&#xff0c;求前序 如后序为DABEC,中序为DEBAC&#xff0c;求前序 则后序倒着写&#xff…

北京Modbus转Profinet网关的作用

背景&#xff1a;随着工业自动化的快速发展&#xff0c;各种仪器设备迅速崛起&#xff0c;但是在仪器出厂前需要很多的零部件来构建出需要的设备及功能&#xff0c;由于自动化设备的零部件不是统一生产商供应的&#xff0c;这样很容易出现某个零部件的通讯协议不匹配&#xff0…

搜索二叉树(超详解)

文章目录 前言查找搜索二叉树的结构insertfinderase递归版本Findinserterase 二叉树的拷贝问题搜索二叉树的应用Key模型Key/Value的模型 前言 普通二叉树其实意义不大&#xff0c; 如果用二叉树存储数据的话&#xff0c;还不如顺序表&#xff0c;链表这些。 搜索二叉树它的意义…

7.5组合总和②(LC40-M)

算法&#xff1a; 相比于上一题&#xff0c;数组candidates有重复元素&#xff0c;而要求不能有重复的组合&#xff0c;所以相对于39.组合总和 (opens new window)难度提升了不少。 如何去重&#xff1f; 先把candidates排序&#xff0c;让重复的元素都在一起 单层递归时&a…

MyBatis的关联查询!!!(一对一、一对多、多对多)

准备工作&#xff1a; 1.创建Maven工程&#xff0c;还没有配置Maven的和还不会的去看这里啦&#xff1a;maven的下载安装与配置环境变量&#xff01;&#xff01;&#xff01;&#xff08;全网最详细&#xff09;-CSDN博客 Account.java : (pojo类) &#xff08;这里我…

认识Linux背景

1.发展史 Linux从哪里来&#xff1f;它是怎么发展的&#xff1f;在这里简要介绍Linux的发展史 要说Linux&#xff0c;还得从UNIX说起 UNIX发展的历史 1968年&#xff0c;一些来自通用电器公司、贝尔实验室和麻省理工学院的研究人员开发了一个名叫Multics的特殊操作系统。Mu…

分布式锁常见问题及其解决方案

一、为什么要使用分布式锁&#xff1f; 因为在集群下&#xff0c;相当于多个JVM&#xff0c;就相当于多个锁&#xff0c;集群之间锁是没有关联的&#xff0c;会照成锁失效从而导致线程安全问题 分布式锁可以分别通过MySQL、Redis、Zookeeper来进行实现 二、redis分布式锁的实…

华为发布全闪备份一体机旗舰新品,并宣布备份软件开源

[中国&#xff0c;上海&#xff0c;2023年12月20日]在20日举行的OceanProtect数据保护新品发布会上&#xff0c;华为发布全闪备份一体机旗舰新品&#xff0c;并宣布备份软件开源&#xff0c;以应对智慧金融、自动驾驶等场景对数据备份效率及数据安全方面的新诉求&#xff0c;为…

工业信息采集平台的五大核心优势

关键字&#xff1a;工业信息采集平台,蓝鹏数据采集系统,蓝鹏测控系统, 生产管控系统, 生产数据处理平台,MES系统数据采集, 蓝鹏数据采集平台通过实现和构成其他工业数据信息平台的一级设备进行通讯&#xff0c;从而完成平台之间的无缝对接。这里我们采用的最多的方式是和PLC进行…

神经网络:深度学习基础

1.反向传播算法&#xff08;BP&#xff09;的概念及简单推导 反向传播&#xff08;Backpropagation&#xff0c;BP&#xff09;算法是一种与最优化方法&#xff08;如梯度下降法&#xff09;结合使用的&#xff0c;用来训练人工神经网络的常见算法。BP算法对网络中所有权重计算…

Redis取最近10条记录

有时候我们有这样的需求&#xff0c;就是取最近10条数据展示&#xff0c;这些数据不需要存数据库&#xff0c;只用于暂时最近的10条&#xff0c;就没必要在用到Mysql类似的数据库&#xff0c;只需要用redis即可&#xff0c;这样既方便也快&#xff01; 具体取最近10条的方法&a…

Go 代码检查工具 golangci-lint

一、介绍 golangci-lint 是一个代码检查工具的集合&#xff0c;聚集了多种 Go 代码检查工具&#xff0c;如 golint、go vet 等。 优点&#xff1a; 运行速度快可以集成到 vscode、goland 等开发工具中包含了非常多种代码检查器可以集成到 CI 中这是包含的代码检查器列表&…

DBA-MySql面试问题及答案-上

文章目录 1.什么是数据库?2.如何查看某个操作的语法?3.MySql的存储引擎有哪些?4.常用的2种存储引擎&#xff1f;6.可以针对表设置引擎吗&#xff1f;如何设置&#xff1f;6.选择合适的存储引擎&#xff1f;7.选择合适的数据类型8.char & varchar9.Mysql字符集10.如何选择…

第九周算法题(哈希映射,二分,Floyd算法 (含详细讲解) )

第九周算法题 第一题 题目来源&#xff1a;33. 搜索旋转排序数组 - 力扣&#xff08;LeetCode&#xff09; 题目描述&#xff1a;整数数组 nums 按升序排列&#xff0c;数组中的值 互不相同 。 在传递给函数之前&#xff0c;nums 在预先未知的某个下标 k&#xff08;0 <…