对于vector容器内的 reserve() 预留容量函数

在《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]内没有元素值。所以返回错误

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值