vector的 resize()和reserve()的区别
为了支持快速随机访问,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()的区别相关推荐
- std::vector中resize()和reserve()区别
在STL容器中vector用的还是比较多的,但是在使用时,会对resize()和reserve()的使用产生迷惑,现在就对这一情况做个对比: resize():改变的是size()与capacity( ...
- vector中resize()和reserve()区别
vector中resize()和reserve()区别 本博客转载自:https://blog.csdn.net/jocodeoe/article/details/9230879 先看看<C++ ...
- STL 里 resize 和 reserve 的区别
resize 和 reserve 的区别 resize() reserve() 测试代码 resize() 改变当前容器内含有元素的数量(size()),eg: vectorv; v.resize(l ...
- std::string的resize()与reserve()的区别
std::string的resize()与reserve()的区别: resize():改变的是size()与capacity()的大小 (1).比原来的变小之后,后面的会被截断 (2).比原来的变大 ...
- vector中resize和reserve接口的异同
初次接触这两个接口也许会混淆,其实接口的命名就是对功能的绝佳描述,resize就是重新分配大小,reserve就是预留一定的空间.这两个接口即存在差别,也有共同点.下面就它们的细节进行分析. ...
- STL里resize和reserve的区别?
vector和deque的区别? 两个函数的功能是有区别 reserve是容器预留空间 resize是改变容器的大小,并且创建对象 reserve函数之后一个参数,即需要预留的容器的空间 为实现res ...
- vector的resize()和reserve()函数
关于resize函数和reserve函数的介绍这篇博客有:https://blog.csdn.net/ma2595162349/article/details/59745204 下面来看一下vecto ...
- C++ vector中的resize,reserve,size和capacity函数讲解
前言 在介绍resize(),reserve(),size()和capacity()函数之前,先简单介绍一下c++中vector的概念. vector:顺序容器(可变大小数组).支持快速随机访问.在尾 ...
- vector的resize函数和reserve函数
博客原文:C++基础篇 -- vector的resize函数和reserve函数_VampirEM_Chosen_One的博客-CSDN博客,写的特别好,谢谢原博主. 正文: 对于C++的vector ...
最新文章
- Jupyter Magic - Timing(%%time %time %timeit)
- js实现html页面倒计30秒,javascript实现简单页面倒计时
- TreeView控件应用--访问文件或文件夹(一)
- mysql数据库增删改查关键字_mysql数据库的增删改查
- jquery.pin 修改浮动的top元素
- 深度学习框架zf_谈谈深度学习框架的数据排布
- Filtering 过滤操作
- CDI Features
- java反射 javabean_Java反射之模仿JavaBean接收表单参数.
- 使用MSAgent代替传统的MessageBox提示来增用客户端用户体验
- 基于Springboot的个人健康监控管理系统
- RuntimeError :excepted object of type torch.floatTensor but found type torch.DoubleTensor
- (Network Analysis)graph centrality measures
- 上海杉达学院计算机课程,上海杉达学院计算机科学与技术专业介绍
- virtualbox虚拟机安装及镜像安装
- inventor能画抄数图吗_画图与图纸转换 抄数
- 仙剑奇侠传亿仙java_《仙剑奇侠传-忆仙》图文攻略之三
- 中国省市关系+各地经纬度【Python版】
- 大神自述|7岁接触建模的大神建模师,分享建模经验与技巧
- 碰撞检测 碰撞检测,,碰撞检测是很多动画中必不可少的