vector中resize和reserve接口的异同
初次接触这两个接口也许会混淆,其实接口的命名就是对功能的绝佳描述,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接口的异同相关推荐
- vector中resize()和reserve()区别
vector中resize()和reserve()区别 本博客转载自:https://blog.csdn.net/jocodeoe/article/details/9230879 先看看<C++ ...
- std::vector中resize()和reserve()区别
在STL容器中vector用的还是比较多的,但是在使用时,会对resize()和reserve()的使用产生迷惑,现在就对这一情况做个对比: resize():改变的是size()与capacity( ...
- vector的 resize()和reserve()的区别
为了支持快速随机访问,vector将元素连续存储--每个元素紧挨着前一个元素存储. 关于vector对象是如何改变容器大小? resize(n) 调整容器元素个数为n,如果n小于容器的原size,则删 ...
- vector的resize()和reserve()函数
关于resize函数和reserve函数的介绍这篇博客有:https://blog.csdn.net/ma2595162349/article/details/59745204 下面来看一下vecto ...
- vector的resize函数和reserve函数
博客原文:C++基础篇 -- vector的resize函数和reserve函数_VampirEM_Chosen_One的博客-CSDN博客,写的特别好,谢谢原博主. 正文: 对于C++的vector ...
- C++ vector中的resize,reserve,size和capacity函数讲解
前言 在介绍resize(),reserve(),size()和capacity()函数之前,先简单介绍一下c++中vector的概念. vector:顺序容器(可变大小数组).支持快速随机访问.在尾 ...
- vector中的reserve() 与 resize()
resize()与reserve()都是vector容器中的方法: resize():改变了capacity()和size() reserve():增加了vector的capacity(),但是它的s ...
- vector中的push_back(涉及到动态分配),resize,reserve,swap方法解析
目录 一.vector的push_back解析 二.size和capacity 三.resize和reserve 1.resize 2.reserve 四.关于reserve的应用 五.内存释放 sw ...
- 关于vector的resize()的理解
ector的resize(),reserve()把我搞的晕头转向,老是记不住.现在把自己的一点理解记录在这里. 先看看http://www.cplusplus.com/reference/vector ...
最新文章
- 2021年大数据ELK(八):Elasticsearch安装IK分词器插件
- (转)如何修改maven的默认jdk版本
- 047_输出一下byte的所有值
- java 快排非递归_C++ 中快排的递归和非递归实现
- wxWidgets:wxComboCtrl 示例
- 【需求工程】需求分析的5W1H8C1D方法
- jsp el 表达式_JSP表达式语言– JSP EL示例教程
- 传统高斯模糊与优化算法(附完整C++代码)
- AI 用神经网络实现序列到序列的学习
- gsp计算机系统系统操作培训,gsp计算机系统操作PPT.ppt
- 循序渐进!疯狂java讲义第五版pdf蓝奏云下载
- 居于U2000手机管理光猫,小区运营商FTTH光猫注册神器,MA5680T手机管理,自动添加光猫...
- mac无法连接服务器无法定位当前位置,mac book pro 无法定位
- python 去重方法
- .bat 开机自动启动
- win10系统迁移到新固态硬盘,win10系统备份还原
- (Google Scholar)谷歌学术打不开怎么办,图文详解
- 服务器如何设置404错误页面
- 如何制作小游戏(c++教程)(新手版)(1)
- 重学设计模式 - Facade模式
热门文章
- C++ 多继承之如何调用私有成员
- 夯实基础,彻底掌握js的核心技术(二):面向对象编程(Object Oriented Programming)
- css3实现背景渐变的方法
- 【Vue】一个案例带你搞懂methods、watch及computed的使用规则
- Modularity(模块化-CMD规范)
- 7-10 A-B (20 分)
- c# mysql存储过程 输出参数值_MySQL 存储过程参数用法 in, out, inout
- android 在线设计工具,21个免费的UI界面设计工具、资源及网站
- cpu消耗 pytorch_高效 PyTorch :如何消除训练瓶颈
- Spring Boot log4j多环境日志级别的控制