vector.clear()不能用来清零
vector.clear()函数并不会把所有元素清零,笔者就曾经这样幻想过这个函数的作用,然而事实证明并不是。
vector有两个参数,一个是size,表示当前vector容器内存储的元素个数,一个是capacity,表示当前vector在内存中申请的这片区域所能容纳的元素个数。
通常capacity会比size大,如果往vector中push_back数据,这样就不用重新申请内存和拷贝元素到新内存区域了,便于节省时间。
所以vector.clear()的真正作用是:把size设置成0,capacity不变。
测试代码如下:
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<vector<int>>res(12,vector<int>(12,0));//12行12列的vector
int count=1;
for(int i=0;i<12;i++)//给vector赋值,递增赋值
{
for(int j=0;j<12;j++)
{
res[i][j]=count;
count++;
}
}
cout<<res.size()<<res.capacity()<<endl;//这时候输出12和12
res.clear();//清空res
cout<<res.size()<<res.capacity()<<endl;//这时候输出0和12,也就是说size设置为0,capacity不变。
for(int i=0;i<12;i++)//这时候输出res的内容,会发现前五个数字是一些杂乱无章的数字,后面就还好
{
for(int j=0;j<12;j++)
{
cout<<res[i][j]<<" ";
}
cout<<endl;
}
return 0;
}
clear()的真正作用是改变size,capacity保持不变,不知道这块区域有没有在clear之后释放给内存去使用。
如果想要清零vector的话,还是得重新定义一个vector,或者用assign函数,示范代码如下:
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<vector<int>>res(12,vector<int>(12,0));
int count=1;
for(int i=0;i<12;i++)//同样递增赋值
{
for(int j=0;j<12;j++)
{
res[i][j]=count;
count++;
}
}
cout<<res.size()<<res.capacity()<<endl;
res.assign(12,vector<int>(12,0));//assign先删除掉res中的所有元素,接着插入12个vector<int>(12,0),时间花费还是大了点
//res=vector<vector<int>>(12,0);//或者直接定义一个新的,赋给res。
for(auto i:res)
{
for(int j:i)
{
cout<<j<<" ";
}
cout<<endl;
}
return 0;
}
vector.clear()不能用来清零的更多相关文章
- vector.erase();vector.clear();map.erase();
vector::erase()返回下一个iter: STL中的源码: //清除[first, last)中的所有元素 iterator erase(iterator first, iterator l ...
- vector.clear()的内存泄露问题
在使用vector的过程中,经常会遇到以下场景 vector<int> vec; ) { vec.push_back(); vec.push_back(); vec.push_back() ...
- 实战c++中的vector系列--正确释放vector的内存(clear(), swap(), shrink_to_fit())
关于vector已经写的差不多了,似乎要接近尾声了,从初始化到如何添加元素再到copy元素都有所涉及,是时候谈一谈内存的释放了. 是的,对于数据量很小的vector,完全没必要自己进行主动的释放,因为 ...
- c++ vector 使用
1. 包含一个头文件: 1 #include <vector> 2. 申明及初始化: std::vector<int> first; // empty vector of in ...
- Vector和Stack(已过时,不建议使用)
以下内容基于jdk1.7.0_79源码: 什么是Vector和Stack Vector:线程安全的动态数组 Stack:继承Vector,基于动态数组实现的一个线程安全的栈: Vector和Stack ...
- 高效使用Vector
参考网页: http://www.cnblogs.com/biyeymyhjob/archive/2013/05/11/3072893.html#undefined 1.初始化的时候,最好先用rese ...
- STL学习二:Vector容器
1.Vector容器简介 vector是将元素置于一个动态数组中加以管理的容器. vector可以随机存取元素(支持索引值直接存取, 用[]操作符或at()方法,这个等下会详讲). vector尾部添 ...
- vector 内部方法大全 学习(初学者的参考资料)
1 vector构造函数:也就是如何对一个vector对象进行初始化 ////////////////////////////代码//////////////////////////////// ...
- STL学习系列二:Vector容器
1.Vector容器简介 vector是将元素置于一个动态数组中加以管理的容器. vector可以随机存取元素(支持索引值直接存取, 用[]操作符或at()方法,这个等下会详讲). vector尾部添 ...
随机推荐
- /etc/inittab加入自动启动格式
R01:35:respawn:/usr/bin/exe_program 说明 R01:标识,每一行必须唯一(R01并无特殊含义,可自定义). 35:有效模式,3字符界面启动,5图形界面启动 respa ...
- 2018.10.19 bzoj1057: [ZJOI2007]棋盘制作(悬线法)
传送门 悬线法板题. 如果只求最大矩形面积那么跟玉蟾宫是一道题. 现在要求最大正方形面积. 所以每次更新最大矩形面积时用矩形宽的平方更新一下正方形答案就行了. 代码: #include<bits ...
- C++之new/delete/malloc/free详解
主要内容: 1. C语言中的函数malloc和free 2. C++中的运算符new和delete 3. new/delete与malloc/free之间的联系和区别 4. C/C++程序的内 ...
- yum 报错:centos yum (28, 'Connection time-out') Trying other mirror.
前言: 在使用yum安装 软件时,经常出现 centos yum (28, 'Connection time-out') Trying other mirror. 或下面的那样情况imeout on ...
- 新浪微博mid和url的互算
我们在使用新浪微博API时,有时需要得到一个微博的url,但是如statuses/public_timeline等接口中取得的微博status的字段中并没有包含.不过,status中包含了一个mid字 ...
- webuploader 文件上传插件 IE8/9 文件选择不上传
IE8/9下文件上传是采用flash模式,一直发送http://xxx.xxx.xx.xx:8888/crossdomain.xml请求,状态码为404,原因是上传文件的服务器未配置crossdoma ...
- (KMP 最大表示最小表示)String Problem -- hdu-- 3374
http://acm.hdu.edu.cn/showproblem.php?pid=3374 String Problem Time Limit: 2000/1000 MS (Java/Others) ...
- HDU2976 Dropping tests 2017-05-11 18:10 39人阅读 评论(0) 收藏
Dropping tests Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 12187 Accepted: 4257 D ...
- PHP 7 安装 Memcache 和 Memcached 总结
Memcache 与 Memcached 的区别 Memcached 是 Memcache 的升级版,优化了 Memcache,并增加了一些操作方法.所以现在基本都是用最近版本的. PHP 7 下安装 ...
- poj2462
看八戒在做这个题,我也做了做.. 坑很多,还是要注意细节.不得不吐槽,难道又到了计算几何只能套模板否则就一串WA的情况了么! 要不是八戒做出来了,这题我估计我也就扔到这里了..哥不服啊~所以得做出来! ...