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

一是保证区间[0, new_size)范围内数据有效,如果下标index在此区间内,vector[indext]是合法的。
     二是保证区间[0, new_size)范围以外数据无效,如果下标index在区间外,vector[indext]是非法的。
     reserve只是保证vector的空间大小(capacity)最少达到它的参数所指定的大小n。在区间[0, n)范围内,如果下标是index,vector[index]这种访问 有可能是合法的,也有可能是非法的 ,视具体情况而定。
     resize和reserve接口的共同点是它们都保证了vector的空间大小(capacity)最少达到它的参数所指定的大小。
     因两接口的源代码相当精简,以至于可以在这里贴上它们:
   void resize(size_type new_size) { resize(new_size, T()); }
    void resize(size_type new_size, const T& x) {
    if (new_size < size())
      erase(begin() + new_size, end()); // erase区间范围以外的数据,确保区间以外的数据无效
    else
      insert(end(), new_size - size(), x); // 填补区间范围内空缺的数据,确保区间内的数据有效
}

void reserve(size_type n) {
    if (capacity() < n) {
      const size_type old_size = size();
      iterator tmp = allocate_and_copy(n, start, finish);
      destroy(start, finish);
      deallocate();
      start = tmp;
      finish = tmp + old_size;
      end_of_storage = start + n;
    }
}

vector中resize和reserve接口的异同相关推荐

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

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

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

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

  3. vector的 resize()和reserve()的区别

    为了支持快速随机访问,vector将元素连续存储--每个元素紧挨着前一个元素存储. 关于vector对象是如何改变容器大小? resize(n) 调整容器元素个数为n,如果n小于容器的原size,则删 ...

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

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

  5. vector的resize函数和reserve函数

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

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

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

  7. vector中的reserve() 与 resize()

    resize()与reserve()都是vector容器中的方法: resize():改变了capacity()和size() reserve():增加了vector的capacity(),但是它的s ...

  8. vector中的push_back(涉及到动态分配),resize,reserve,swap方法解析

    目录 一.vector的push_back解析 二.size和capacity 三.resize和reserve 1.resize 2.reserve 四.关于reserve的应用 五.内存释放 sw ...

  9. 关于vector的resize()的理解

    ector的resize(),reserve()把我搞的晕头转向,老是记不住.现在把自己的一点理解记录在这里. 先看看http://www.cplusplus.com/reference/vector ...

最新文章

  1. 2021年大数据ELK(八):Elasticsearch安装IK分词器插件
  2. (转)如何修改maven的默认jdk版本
  3. 047_输出一下byte的所有值
  4. java 快排非递归_C++ 中快排的递归和非递归实现
  5. wxWidgets:wxComboCtrl 示例
  6. 【需求工程】需求分析的5W1H8C1D方法
  7. jsp el 表达式_JSP表达式语言– JSP EL示例教程
  8. 传统高斯模糊与优化算法(附完整C++代码)
  9. AI 用神经网络实现序列到序列的学习
  10. gsp计算机系统系统操作培训,gsp计算机系统操作PPT.ppt
  11. 循序渐进!疯狂java讲义第五版pdf蓝奏云下载
  12. 居于U2000手机管理光猫,小区运营商FTTH光猫注册神器,MA5680T手机管理,自动添加光猫...
  13. mac无法连接服务器无法定位当前位置,mac book pro 无法定位
  14. python 去重方法
  15. .bat 开机自动启动
  16. win10系统迁移到新固态硬盘,win10系统备份还原
  17. (Google Scholar)谷歌学术打不开怎么办,图文详解
  18. 服务器如何设置404错误页面
  19. 如何制作小游戏(c++教程)(新手版)(1)
  20. 重学设计模式 - Facade模式

热门文章

  1. C++ 多继承之如何调用私有成员
  2. 夯实基础,彻底掌握js的核心技术(二):面向对象编程(Object Oriented Programming)
  3. css3实现背景渐变的方法
  4. 【Vue】一个案例带你搞懂methods、watch及computed的使用规则
  5. Modularity(模块化-CMD规范)
  6. 7-10 A-B (20 分)
  7. c# mysql存储过程 输出参数值_MySQL 存储过程参数用法 in, out, inout
  8. android 在线设计工具,21个免费的UI界面设计工具、资源及网站
  9. cpu消耗 pytorch_高效 PyTorch :如何消除训练瓶颈
  10. Spring Boot log4j多环境日志级别的控制