文档章节

vector中resize()和reserve()区别

清风伴月
 清风伴月
发布于 2017/05/03 17:21
字数 390
阅读 20
收藏 0

1、resize(n) 

调整容器的长度大小,使其能容纳n个元素。

如果n小于容器的当前的size,则删除多出来的元素。

否则,添加采用值初始化的元素。

2、 resize(n,t)

多一个参数t,将所有新添加的元素初始化为t。

 

而reserver()的用法只有一种

reserve(n)

预分配n个元素的存储空间。

 

了解这两个函数的区别,首先要搞清楚容器的capacity(容量)与size(长度)的区别。

size指容器当前拥有的元素个数;

而capacity则指容器在必须分配新存储空间之前可以存储的元素总数。

也可以说是预分配存储空间的大小。

 

resize()函数和容器的size息息相关。调用resize(n)后,容器的size即为n。

至于是否影响capacity,取决于调整后的容器的size是否大于capacity。

 

reserve()函数和容器的capacity息息相关。

调用reserve(n)后,若容器的capacity<n,则重新分配内存空间,从而使得capacity等于n。

如果capacity>=n呢?capacity无变化。

 

从两个函数的用途可以发现,容器调用resize()函数后,所有的空间都已经初始化了,所以可以直接访问。

而reserve()函数预分配出的空间没有被初始化,所以不可访问。

 

一个简单的测试用例:

  1. vector<int> a;  
  2.   
  3. a.reserve(100);  
  4. a.resize(50);  
  5. cout<<a.size()<<"  "<<a.capacity()<<endl;  
  6. a.resize(150);  
  7. cout<<a.size()<<"  "<<a.capacity()<<endl;  
  8. a.reserve(50);  
  9. cout<<a.size()<<"  "<<a.capacity()<<endl;  
  10. a.resize(50);  
  11. cout<<a.size()<<"  "<<a.capacity()<<endl;  

© 著作权归作者所有

下一篇: HashMap
清风伴月
粉丝 1
博文 129
码字总数 255659
作品 0
海淀
程序员
私信 提问
C++ reserve 与 resize的区别

resize要求容器具有sz个元素,可以使用c类型拷贝填充。否则用默认构造子填充;调用resize之后,容器的size()返回值发生改变; reserve要求容器可以容纳至少N个元素。它实际是要求容器分配内存...

老朱教授
2017/11/14
0
0
STL中vector的capacity、size、reserve、resize

size是指容器当前拥有元素的个数,而capacity是指容器在必须分配新的存储空间之前可以存放的元素总数。如vector ivect(10),ivect.capacity()=10,ivect.size()=0,当你向ivect中插入元素时,只...

Quincuntial
2015/12/31
0
0
c++中vector的用法详解

转自:http://blog.csdn.net/hancunai0017/article/details/7032383 vector(向量): C++中的一种数据结构,确切的说是一个类.它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大...

shenhuan1104
2017/11/24
0
0
【STL记录】Containers--Vectors

Vector类似于一个动态数组 使用vector,需加入头文件: 一、Abilities of Vectors Vector复制所有元素到它的内部动态数组中。通常这些元素是有一定顺序的,因此vector是一种有序集合。 Vect...

大道无名
2016/07/23
4
0
[完整学习]-vector[序列容器 动态数组 分配符操作]

[完整学习]-vector[序列容器 动态数组 分配符操作] 头文件写法 构造函数写法(3种方法,与array初始化类似) 重新分配向量函数 : assign()函数 包含3种用法(c11) 获取元素:1.使用的操作符 ...

散人lin
2018/01/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

《生活的难题》的读后感3600字范文

《生活的难题》的读后感3600字范文: 假如我们对丑的事物也能够像对待美的事物那般抱持一种开放、接纳的心态,拥有相同的感受力,那么我们便会发现它们都是充满意义的,而这种认识会使生活变...

原创小博客
16分钟前
1
0
Linux learn(四)

7. Linux磁盘与文件系统管理 文件系统通常会将数据放在不同的区块,权限与属性放置到inode中,至于实际数据则放到datab lock区块中,另外,还有一个超级区块(superblock)会记录整个文件系统...

lazy~
23分钟前
1
0
微信公众号开发(四)

微信公众号开发时常需要一个用户授权绑定的过程。关于微信公众号的用户绑定,一般有如下两种实现方式: (1)通过发送短信验证码的方式; (2)使用用户登录时,向后端传递openid的方式。 使...

织梦之魂
今天
3
0
设计模式-工厂模式

工厂模式 工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在工厂模式中,我们在创建对象时不会对客户端...

HOT_POT
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部