在《c++Primer》中看到了reserve()的介绍,想到一个问题,如果reserve(n)中n的值比capacity()的值小,那么这个函数将返回什么,继续看了下书,好像没提到,经代码测试后,发现如果n的值小于capacity()的值,则此句无效,也不返错,即等于这段代码没有执行一样。这就是意味着reserve(n)不是在原来容量的基础上再扩展一些容量,而是预留整个容器的容量值为n,且n的值大于容器本身的容量时,才有效果
vector<int> a(10,2);
cout<<"capacity:"<<a.capacity()<<endl;
a.reserve(30);
cout<<"capacity:"<<a.capacity()<<endl;
a.reserve(5);
cout<<"capacity:"<<a.capacity()<<endl;
cout<<"a[0] = "<<a[0]<<endl;
cout<<"a[5] = "<<a[5]<<endl;
cout<<"a[6] = "<<a[6]<<endl;
cout<<"a[10] = "<<a[10]<<endl;
cout<<"a[11] = "<<a[11]<<endl;
单步调试结果是:
capacity:10
capaccity:30
capaccity:30
a[0] = 2
a[5] = 2
a[6] = 2
接下来出错,因为执行到
cout<<"a[10] = "<<a[10]<<endl;
cout<<"a[11] = "<<a[11]<<endl;
时,a[10]和a[11]内没有元素值。所以返回错误