vector中的resize与 reserve
void reserve (size_type n);
reserver函数用来给vector预分配存储区大小,即capacity的值 ,但是没有给这段内存进行初始化。reserve 的参数n是推荐预分配内存的大小,实际分配的可能等于或大于这个值,即n大于capacity的值,就会reallocate内存 capacity的值会大于或者等于n 。这样,当调用push_back函数使得size 超过原来的默认分配的capacity值时 避免了内存重分配开销。
需要注意的是:reserve 函数分配出来的内存空间,只是表示vector可以利用这部分内存,但vector不能有效地访问这些内存空间,访问的时候就会出现越界现象,导致程序崩溃。
void resize (size_type n);
void resize (size_type n, value_type val);
resize函数重新分配大小,改变容器的大小,并且创建对象
当n小于当前size()值时候,vector首先会减少size()值 保存前n个元素,然后将超出n的元素删除(remove and destroy)
当n大于当前size()值时候,vector会插入相应数量的元素 使得size()值达到n,并对这些元素进行初始化,如果调用上面的第二个resize函数,指定val,vector会用val来初始化这些新插入的元素
当n大于capacity()值的时候,会自动分配重新分配内存存储空间。
例子:
#include<algorithm>
#include<vector>
#include<list>
#include<iostream>
#include<string>
#include<numeric>
#include<iterator>
using namespace std; int main()
{
vector<double> v1={,,,,,,,,};
list<string> v2={"a","a","dfd","fd","a"};
int count1=count(v1.begin(),v1.end(),);
cout<<count1<<endl;
int count2=count(v2.begin(),v2.end(),"a");
cout<<count2<<endl;
cout<<accumulate(v1.begin(),v1.end(),)<<endl;
vector<int> vec; //此时vec为空
//分配预留空间的插入
vec.reserve();
cout<<vec[]<<endl;
cout<<vec[]<<endl;
fill_n(vec.begin(),,);
//没有分配预留空间的插入
//fill_n(back_inserter(vec),10,0);
return ;
}
vector中的resize与 reserve的更多相关文章
- C++ Daily《2》----vector容器的resize 与 reserve的区别
C++ STL 库中 vector 容器的 resize 和 reserve 区别是什么? 1. resize 改变 size 大小,而 reserve 改变 capacity, 不改变size. 2 ...
- C++:vector中的resize()函数 VS reserve()函数
http://www.cnblogs.com/biyeymyhjob/archive/2013/05/11/3072893.html
- vector中resize()和reserve()的区别
先看看<C++ Primer>中对resize()函数两种用法的介绍: 1.resize(n) 调整容器的长度大小,使其能容纳n个元素. 如果n小于容器的当前的size,则删除多出来的元素 ...
- vector中resize()和reserve()区别
先看看<C++ Primer>中对resize()函数两种用法的介绍: 1.resize(n) 调整容器的长度大小,使其能容纳n个元素. 如果n小于容器的当前的size,则删除多出来的元素 ...
- vector 的resize 和 reserve
首先声明,都是转载的,理解知识为主要目的. http://www.cnblogs.com/zahxz/archive/2013/02/20/2918711.html C++内置的数组支持容器的机制,但 ...
- vector性能调优之resize与reserve
vector的resize与reserve reserve()函数为当前vector预留至少共容纳size个元素的空间.(译注:实际空间可能大于size) resize() 函数( void resi ...
- vector 的resize与reserve
最近遇到一个坑,简单说来是resize与reserve的功能混淆了. 如下: 如果调用resize的化,编译会出错,如果给Text提供默认构造函数,则可以编译通过,最终输出的结果为10. 如果调用re ...
- STL-- vector中resize()和reserve()区别
最近写了一个小型的STL--TinySTL.发现有一些基础的东西需要记录下来,所以我打算多写一些东西,方便以后查看. 先看看<C++ Primer>中对resize()函数两种用法的介绍: ...
- CPP-STL:vector中的size和capacity
在vector中与size()和capacity() 相对应的有两个函数: resize(size_type)和reserve(size_type). Size指目前容器中实际有多少元素,对应的res ...
随机推荐
- JavaWeb学习总结(十三)——使用Session防止表单重复提交
在平时开发中,如果网速比较慢的情况下,用户提交表单后,发现服务器半天都没有响应,那么用户可能会以为是自己没有提交表单,就会再点击提交按钮重复提交表单,我们在开发中必须防止表单重复提交. 一.表单重复提 ...
- VMware与宿敌Amazon一笑泯恩仇:重新定义混合云?(私有云节节败退)
摘要: 私有云巨头VMware看来是真的要输给一个“书贩子” 了!这意味着私有云将败给公有云? [阅读原文] 三年前,虚拟化巨头VMware曾对亚马逊Amazon云服务AWS竖过中指:我们怎么可能打不 ...
- 根据价格范围筛选汽车(路由以及JS与Jquery)
通过输入价格范围,来筛选汽车,主要方法是通过点击“查询”按钮,触发chaxun()方法,利用Jquery和JS获取输入的值,然后为相应的div加载相应的动作,通过更改路由的路径,以此来实现筛选车辆,然 ...
- NOI2010航空管制
2008: [Noi2010]航空管制 Time Limit: 10 Sec Memory Limit: 552 MBSubmit: 31 Solved: 0[Submit][Status] De ...
- [HDU 1963] Investment
Investment Time Limit:10000MS Memory Limit:32768KB 64bit IO Format:%lld & %llu Descrip ...
- 【转】Mac QQ截图保存在哪里?
原文网址:http://www.pc6.com/edu/67677.html QQ Mac版的截屏图片保存在哪儿呢?可不可以像Windows版本一样设定保存路径呢?当然是可定的.Mac QQ截图保存你 ...
- sharepoint2010网站根据权限隐藏ribbon
转:http://www.it165.net/design/html/201302/1734.html 项目要求让普通用户看不到"网站操作",为了解决该问题,我找了好几篇博客,但都 ...
- ARM-Linux配置DHCP自动获取IP地址
备注:内核版本:2.6.30.9busybox版本:1.15.2 PC Linux和开发板Linux的工作用户:root 1. 配置内核:[*] Networking support --->N ...
- Android批量插入数据到SQLite数据库
Android中在sqlite插入数据的时候默认一条语句就是一个事务,因此如果存在上万条数据插入的话,那就需要执行上万次插入操作,操作速度可想而知.因此在Android中插入数据时,使用批量插入的方式 ...
- seg格式文件的分析
s ,r, c1, c2 第r行的c1列到 c2列的值为s