为了支持快速随机访问,vector将元素连续存储——每个元素紧挨着前一个元素存储。
关于vector对象是如何改变容器大小?

resize(n)
调整容器元素个数为n,如果n小于容器的原size,则删除多余的元素,否则必须添加新元素并且初始化。
resize(n,t)
调整容器元素个数为n,并且同时初始化为t。

注:若果resize缩小容器,则指向被删除元素的迭代器,引用和指针都会失效;
同时提供了关于容器容量的成员函数

reserve(n)
分配至少能容纳n个元素的内存空间

注:reserve并不改变容器中元素的数量,它仅影响vector预先分配多大的内存空间

同时,理解size和capacity的区别非常重要

size:是指容器已经保存的元素的个数
capacity:是指容器与分配的存储空间的大小

以下代码表示size和capacity的区别

vector<int>v;cout << "v1:size:" << v.size()<< "capacity:" << v.capacity() << endl;for (vector<int>::size_type i = 0; i != 10; ++i){v.push_back(i);}cout << "v1:size:" << v.size()<< "capacity:" << v.capacity() << endl;


由运行结果可知,初始化的vector的size和capacity都为0,当插入元素后,元素个数与size相同,capacity基本大于元素个数。
我们调整代码如下:

vector<int>v;cout << "v1:size:" << v.size()<< "capacity:" << v.capacity() << endl;for (vector<int>::size_type i = 0; i != 10; ++i){v.push_back(i);}cout << "v1:size:" << v.size()<< "capacity:" << v.capacity() << endl;v.resize(7);v.reserve(24);cout << "v1:size:" << v.size()<< "capacity:" << v.capacity() << endl;

运行结果:

由运行结果我们可知

resize()函数与size相关,调用resize(n)之后,容器的size就为n,至于同时是否影响capacity,取决于调整后的容器size是否大于capacity。
reserve()函数与capacity相关,调用reserve(n)之后,如果容器当前capacity<n,则重新分配内存空间,使capacity=n;如果capacity>=n,capacity不发生变化。

因此我们可以看出来,reserve是容器预留空间,同时并没有创建元素,在创建元素之前不能引用容器内的元素;resize是改变容器大小,并且创建对象,因此当调用该函数后,就可以通过operator[]或者迭代器来引用容器内的元素。

vector的 resize()和reserve()的区别相关推荐

  1. std::vector中resize()和reserve()区别

    在STL容器中vector用的还是比较多的,但是在使用时,会对resize()和reserve()的使用产生迷惑,现在就对这一情况做个对比: resize():改变的是size()与capacity( ...

  2. vector中resize()和reserve()区别

    vector中resize()和reserve()区别 本博客转载自:https://blog.csdn.net/jocodeoe/article/details/9230879 先看看<C++ ...

  3. STL 里 resize 和 reserve 的区别

    resize 和 reserve 的区别 resize() reserve() 测试代码 resize() 改变当前容器内含有元素的数量(size()),eg: vectorv; v.resize(l ...

  4. std::string的resize()与reserve()的区别

    std::string的resize()与reserve()的区别: resize():改变的是size()与capacity()的大小 (1).比原来的变小之后,后面的会被截断 (2).比原来的变大 ...

  5. vector中resize和reserve接口的异同

    初次接触这两个接口也许会混淆,其实接口的命名就是对功能的绝佳描述,resize就是重新分配大小,reserve就是预留一定的空间.这两个接口即存在差别,也有共同点.下面就它们的细节进行分析.      ...

  6. STL里resize和reserve的区别?

    vector和deque的区别? 两个函数的功能是有区别 reserve是容器预留空间 resize是改变容器的大小,并且创建对象 reserve函数之后一个参数,即需要预留的容器的空间 为实现res ...

  7. vector的resize()和reserve()函数

    关于resize函数和reserve函数的介绍这篇博客有:https://blog.csdn.net/ma2595162349/article/details/59745204 下面来看一下vecto ...

  8. C++ vector中的resize,reserve,size和capacity函数讲解

    前言 在介绍resize(),reserve(),size()和capacity()函数之前,先简单介绍一下c++中vector的概念. vector:顺序容器(可变大小数组).支持快速随机访问.在尾 ...

  9. vector的resize函数和reserve函数

    博客原文:C++基础篇 -- vector的resize函数和reserve函数_VampirEM_Chosen_One的博客-CSDN博客,写的特别好,谢谢原博主. 正文: 对于C++的vector ...

最新文章

  1. Jupyter Magic - Timing(%%time %time %timeit)
  2. js实现html页面倒计30秒,javascript实现简单页面倒计时
  3. TreeView控件应用--访问文件或文件夹(一)
  4. mysql数据库增删改查关键字_mysql数据库的增删改查
  5. jquery.pin 修改浮动的top元素
  6. 深度学习框架zf_谈谈深度学习框架的数据排布
  7. Filtering 过滤操作
  8. CDI Features
  9. java反射 javabean_Java反射之模仿JavaBean接收表单参数.
  10. 使用MSAgent代替传统的MessageBox提示来增用客户端用户体验
  11. 基于Springboot的个人健康监控管理系统
  12. RuntimeError :excepted object of type torch.floatTensor but found type torch.DoubleTensor
  13. (Network Analysis)graph centrality measures
  14. 上海杉达学院计算机课程,上海杉达学院计算机科学与技术专业介绍
  15. virtualbox虚拟机安装及镜像安装
  16. inventor能画抄数图吗_画图与图纸转换 抄数
  17. 仙剑奇侠传亿仙java_《仙剑奇侠传-忆仙》图文攻略之三
  18. 中国省市关系+各地经纬度【Python版】
  19. 大神自述|7岁接触建模的大神建模师,分享建模经验与技巧
  20. 碰撞检测 碰撞检测,,碰撞检测是很多动画中必不可少的

热门文章

  1. 《Effective Modern C++》笔记
  2. ExecuteNonQuery()返回值
  3. DedeCMS找后台目录漏洞
  4. ui培训学校哪个比较好?
  5. GPS授时是什么意思
  6. Android 自定义View 一行显示不下换行显示
  7. linux 自定义欢迎界面 /etc/motd文件
  8. visio2019专业版下载和安装包图文步骤教程
  9. 部分ADSL猫的默认密码
  10. 化工厂化纤工厂公用工厂调研报告,化工厂监管工业物联网数据采集上云方案