vector之慎用push_back

vector之慎用push_back

push_back是在vector有效元素的末尾添加新元素,所以首先要明白resize与reserve的区别
先上结论:
vec.resize(size)后用push_back,是在vec[size]处开始添加元素,所以resize与push_back不要连用。
resize后,直接通过下标索引的方式改变元素值。
对于大量数据的存储,使用reserve + push_back 的方式,或者resize + 下标索引 的方式。

1、resize与reserve及vector构造函数的区别
1)resize(int size,int default=0)改变vector的有效空间大小,并对vector空间中每一个单位空间调用构造函数初始化,赋初始值(默认为0),可以直接通过下标索引访问更改vector中的元素
2)reserve(int size)改变vector的总空间(capcity),不对vector空间中每一个单位空间调用构造函数初始化。
3)vector vec(size);当给定size值时,相当于resize,对vec中size个元素初始化,赋初始值。

2、push_back的使用
1)直接声明vector,并调用push_back

vector<int> vec;
for(int i=0;i<3;i++)
	vec.push_back(i);
for(int i=0;i<vec.size();i++)
	cout<<vec[i];

结果为0,1,2
对于少量数据的存储可以直接用这种方式
2)reserve预分配存储区大小后,用push_back,结果等同于1)
3)resize改变有效空间后,用push_back

vector<int> vec;
vec.resize(3);			//改变vec有效空间,此时vec中的有效元素有三个0,0,0
for(int i=0;i<3;i++)
	vec.push_back(i);
for(int i=0;i<vec.size();i++)
	cout<<vec[i];

结果为0,0,0, 0,1,2
push_back是在vec有效元素后添加新元素,最后的总空间为(resize的空间+push_back添加的空间)
4)声明vector时给定空间大小size,结果等同于3)resize

vector<int> vec(3);		//此时vec中的有效元素有三个0,0,0
for(int i=0;i<3;i++)
	vec.push_back(i);
for(int i=0;i<vec.size();i++)
	cout<<vec[i];

结果为0,0,0, 0,1,2

  • 1
    点赞
  • 0
    评论
  • 2
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值