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;
}
所以,正确使用就不会出现特别大的问题