reserve和resize

void test_vector4()
{
	vector<int> v1;
	//cout << v1.max_size() << endl;
	//v1.reserve(10);
	v1.resize(10);
	for (size_t i = 0; i < 10; i++)
	{
		v1[i] = i;
	}

	for (auto e : v1)
	{
		cout << e << " ";
	}
	cout << endl;


	
}

在上面这段代码中对比了reserve和resize两种情况下的输出,会发现当使用reserve时,会中中断运行,是走不通的,是因为reserve是访问有效数据,0-1才是有效数据,reserve是减少扩容的消耗,他是首先开好空间,但不会扩容,所以在[]检测判断以下情况时,就会发生错误:

此时,有两种解决办法:

第一种,将reserve改为resize,resize直接将空间开好,并且把size也提上来

void test_vector4()
{
	vector<int> v1;
	v1.resize(10);
	for (size_t i = 0; i < 10; i++)
	{
		v1[i] = i;
	}

	for (auto e : v1)
	{
		cout << e << " ";
	}
	cout << endl;
}

第二种:

void test_vector4()
{
	vector<int> v2;
	v2.reserve(10);
	for (size_t i = 0; i < 10; i++)
	{
		v2.push_back(i);
	}
	for (auto e : v2)
	{
		cout << e << " ";
	}
	cout << endl;
}

所以,正确使用就不会出现特别大的问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值