《21天学通C++(第7版)》——17.3 理解大小和容量-阿里云开发者社区

开发者社区> 开发与运维> 正文

《21天学通C++(第7版)》——17.3 理解大小和容量

简介:

本节书摘来自异步社区出版社《21天学通C++(第7版)》一书中的第17章,第17.3节,作者: 【美】Siddhartha Rao, 【德】Nicolai M. Josuttis,更多章节内容可以访问云栖社区“异步社区”公众号查看。

17.3 理解大小和容量

21天学通C++(第7版)
vector的大小指的是实际存储的元素数,而vector的容量指的是在重新分配内存以存储更多元素前vector能够存储的元素数。因此,vector的大小小于或等于容量。

要查询vector当前存储的元素数,可调用size():
image

要查询vector的容量,可调用capacity():
image

如果vector需要频繁地给其内部动态数组重新分配内存,将对性能造成一定的影响。在很大程度上说,这种问题可以通过使用成员函数reserve (number)来解决。reserve函数的功能基本上是增加分配给内部数组的内存,以免频繁地重新分配内存。通过减少重新分配内存的次数,还可减少复制对象的时间,从而提高性能,这取决于存储在vector中的对象类型。程序清单17.7说明了size()和capacity()之间的区别。

程序清单17.7 演示size()和capacity()
image

输出:
image

分析:
第8行实例化了一个包含5个整型对象的vector,这些整型对象使用默认值0。第11行和第12行分别显示vector的大小和容量,它们在实例化后相等。第15行在vector中插入了第6个元素。鉴于在插入前vector的容量为5,因此vector的内部缓冲区没有足够的内存来存储第6个元素。换句话说,vector为扩大其容量以存储6个元素,需要重新分配内部缓冲区。重新分配的逻辑实现是智能的:为避免插入下一个元素时再次重新分配,提前分配了比当前需求更大的容量。

从输出可知,在容量为5的vector中插入第6个元素时,将容量增大到了7。size()总是指出vector存储的元素数,当前其值为6。第22行插入了第7个元素,这次没有扩大容量,因为已分配的内存足以满足需求。这时大小和容量相等,这表明vector的容量已经用完,再次插入元素将导致vector重新分配其内部缓冲区、复制现有的元素再插入新值。

在重新分配vector内部缓冲区时提前增加容量方面,C++标准没有做任何规定,这取决于使用的STL实现。
本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章