当前位置: 首页 > news >正文

广西南宁网站建设哪家好邢台网站建设免费做网站排名

广西南宁网站建设哪家好,邢台网站建设免费做网站排名,怎么查询自己的商标,抚州市建设局官网站std::string的resize与reverse前言1.resize2.reserve前言 在C中我们经常用std::string 来保存字符串,其中有两个比较常用但是却平时容易被搞混的两个函数,分别是resize和reserve,模糊意识里,这两个方法都是对std::string的容量或元…

std::string的resize与reverse

    • 前言
    • 1.resize
    • 2.reserve

前言

 在C++中我们经常用std::string 来保存字符串,其中有两个比较常用但是却平时容易被搞混的两个函数,分别是resize和reserve,模糊意识里,这两个方法都是对std::string的容量或元素进行操作,那么这两个函数到底做了什么呢?

 先声明string中的两个概念,capaticy(容量)和size(大小)

  • capaticy:容量,即容器(此处指string容器),所拥有的存放多少元素的能力,如果把string比作厕所,那capaticy就可以理解为厕所有多少个坑位,很明显,并不一定每个坑都有人蹲着。

  • size:大小,即容器内实际存放了多少个元素,还是以厕所类比的话,就是当前厕所里实际有几个人蹲坑😄

1.resize

constexpr void resize(size_type n);
constexpr void resize(size_type n, CharT c);

 顾名思义,resize就是重新规划string的大小,如上面声明所说,这里的size代表的并不是string容器的容量,而是元素的个数,比如一个std::string的容量是20,即其能最多够放的下20个元素,但是它只放了11个,那有9个就是空着的,这里的size就是11,代表实际元素的个数。

 这里可以通过std::string的size方法和capacity方法查看容器的元素个数以及容量大小

	string s2("hello wrold");cout << "size:" << s2.size() << endl;cout << "capacity:" << s2.capacity() << endl;cout << s2 << endl;
size:11
capacity:15
hello wrold

 可以看到,s2内存放了11个元素,但是它的容量是15个元素,其余4个是空闲的

 resize呢,其操作的目标就是元素,我们可以利用resize来改变容器内元素的个数,例如:

  1. 当参数n的值,小于当前容器的容量

     这种情况下,容器中长度在n之外的部分会被截取掉,只保留n长度内的元素,但是容器的容量却没有改变,更不会出现扩容的状况,我们可以通过这段代码验证这一点

	string s2("hello wrold");cout << "size:" << s2.size() << endl;cout << "capacity:" << s2.capacity() << endl;cout << s2 << endl;	s2.resize(5);//缩小,不会改变容量cout << "size:" << s2.size() << endl;cout << "capacity:" << s2.capacity() << endl;cout << s2 << endl;
size:11
capacity:15
hello wrold
size:5
capacity:15
hello

  可以看的出来,容器内的元素个数变成了5个,只有’hello’5个字符了,但是其容量还是30,也就是在不扩容的情况下,其还可以容纳25个元素。

  1. 参数n的值,大于当前容器的容量

     在这种情况下,容器为了能够放的下更多的元素,会发生扩容,扩容之后,其容量会比原来大,但是原来容器中的元素个数肯定是小于当前容器的容量的,此时容器将会把没有用到的空间给初始化,用什么初始化呢,这就看第二个参数c了,如果指定了c,则剩余的坑位全用c来初始化,如果没有指定呢,那就用string的默认初始化了,这就意味着,这种情况下,容器一定是分配了内存并全部发生了初始化的。

    我们可以通过下面这段代码感受一下这种情况:

	string s2("hello wrold");cout << "size:" << s2.size() << endl;cout << "capacity:" << s2.capacity() << endl;cout << s2 << endl;//没有pos默认'\0's2.resize(20);//改变size,如果容量不够会扩容cout << "size:" << s2.size() << endl;cout << "capacity:" << s2.capacity() << endl;cout << s2 << endl;
//以下代码全部源自:https://blog.csdn.net/m0_72964546/article/details/126926073
size:11
capacity:15
hello wrold
size:20
capacity:30
hello wrold

2.reserve

 reserve与resize的区别在于,reserve只会对string的capacity产生影响,其函数原型为

void reserve( size_type n) ;

 这里,n的大小影响着reserve的行为,分为n大于当前容量和n小于当前容量两种情况

  1. 当n< 当前容量时

 string容器这时的行为很简单,就是什么都不做,一切照旧。可以从下面代码中观察出:

    string s3("hello wrold");cout << "size:" << s3.size() << endl;cout << "capacity:" << s3.capacity() << endl;cout <<s3 << endl;s3.reserve(5);cout << "size:" << s3.size() << endl;cout << "capacity:" << s3.capacity() << endl;cout <<s3 << endl;
size:11
capacity:15
hello wrold
size:11
capacity:15
hello wrold
  1. 当 n>当前容量时

 这里引用官方文档的一句话:

如果n值大于容器现有容量(即capacity),那么就在自由内存空间为整个容器重新分配一块更大的连续空间【因为vector是顺序容器,所以存储空间一定是连续的】,然后将容器内所有的有效元素从旧空间的位置全部复制到新空间相应的位置,然后释放旧空间,并调整容器的元素位置指示器。所以reserve函数的结果只是让容器的冗余容量变大,容器的实际大小即元素个数并没有变化。

 这里的表述也非常准确了,即当n大于容器当前的capacity时,会重新找一块比现在大的连续内存空间,将所有数据拷贝到新的内存中,释放掉旧的内存。这里,虽然容器有了更大的空间,但是容器内的元素却始终都是原来的元素,其数量没有发生变化,并且没有被用上的空间虽然分配了内存,但是并没有被初始化。

 例如

	string s4("hello world");cout << "size:" << s4.size() << endl;cout << "capacity:" << s4.capacity() << endl;cout <<s4 << endl;s4.reserve(50);cout << "size:" << s4.size() << endl;cout << "capacity:" << s4.capacity() << endl;cout << s4 << endl;
size:11
capacity:15
hello world
size:11
capacity:50
hello world

 以上就是本文所要分享的内容,希望大家每天坚持进步~

http://www.yayakq.cn/news/969871/

相关文章:

  • 长沙旅游网站制作携程网站建设目的
  • 网站备案要网站做才可以使用吗重庆网站制作公司多少钱
  • 有没有专门找装修公司的网站网站备案证明
  • 可以直接进入的网站正能量大豆网莫奈设计公司官网
  • 网站制作自学百度云原画外包网
  • cms建站系统网站开发实用技术2.8.5
  • 博文阅读网站建设wordpress 空格
  • 沈阳网站制作系统域名查询 ip
  • 中国建设银行官方网站k宝驱动现在还有人做网站吗
  • 网站seo问题诊断工具一个完整网页的制作
  • 水果网站策划书永久网站建设教程
  • 芜湖有哪些招聘网站丝瓜app官网下载安装io
  • 长春建站方案化妆品商城网站建设
  • 东莞网站优化效果如何电商网站前端模板
  • 建站小二wordpress is single
  • 网站备案编号查询优秀的公司网站
  • 广东官方网站建设搜索引擎推广有哪些平台
  • 免费网站安全软件下载寻求一个专业网站制作公司
  • 免费网站建设视频温江网站制作
  • 坪山网站建设流程万网wordpress
  • 金华婺城建设局网站建筑企业招聘网站
  • 汉子由来 外国人做的网站番禺建设网站
  • 广州网站定做北京建设工程交易信息网站
  • 微网站自己可以做么常州网站快速排名优化
  • 电商网站获取流量的方法win10搭建服务器做网站
  • 编程网站项目做哪个比较好北京vi设计
  • asp.net做网站怎么样表白网页制作代码
  • 专注苏州网站建设俄罗斯免费服务器
  • 中文商城响应式html网站模板seo也成搜索引擎优化
  • 东莞企业网站seo网络代运营推广